Chinaunix首页 | 论坛 | 博客
  • 博客访问: 347961
  • 博文数量: 14
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 1081
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-25 16:58
文章分类

全部博文(14)

文章存档

2011年(1)

2009年(2)

2008年(11)

我的朋友

分类:

2008-09-11 15:50:06

//*********************************************************************************
    //将15位身份证转换成18位时,首先把出生年扩展4位,就是在原来15位号码的第6为数字后
    //增加一个19,然后在第17位数字后添加一位校验码,校验码是由前17位数字本体码加权求
    //和公式,通过计算模,再通过模得到对应的校验码。
    //计算校验码公式
    //(1)17位数字本体码加权求和公式
    //S=Sum(Ai*Wi),i=0,...,16,先对前17位数字的权求和
    //Ai:表示第i位置上的身份证号码数字值
    //Wi:表示第i位置上的加权因子
    //Wi;7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
    //
    //(2)计算模
    //Y=mod(S,11)
    //(3)通过模得到对应的校验码
    //Y:0 1 2 3 4 5 6 7 8 9 10
    //校验码:1 0 X 9 8 7 6 5 4 3 2
    //*****************************************************************************
    ///
    /// 将15位的身份证号码转换成18位的身份证好码
    ///

    /// 身份证号码
    /// 返回18位身份证号码
    public static string Convert15to18 (string idCard)
    {
        string code = idCard.Trim();//获得身份证号码
        if (code.Length==15)//如果是15位则转换
        {           
            char[] strJY ={ '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' };
            int[] intJQ ={ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 };
            string strTemp;
            int intTemp = 0;
            strTemp = code.Substring(0, 6) + "19" + code.Substring(6);
            for (int i = 0; i <= strTemp.Length - 1; i++)
            {
                intTemp = intTemp + int.Parse(strTemp.Substring(i, 1)) * intJQ[i];
            }
            intTemp = intTemp % 11;
            return strTemp + strJY[intTemp];
        }
        else
        {
            if (code.Length == 18)//如果是18位直接返回
            {
                return code;
            }
            return string.Empty;//如果即不是15位也不是18位则返回空
        }      
    }
    ///
    /// 获得出身年月日
    ///

    /// 身份证号码
    /// 返回出身年月日
    public static string GetBirth(string idCard)
    {
        string code = Convert15to18(idCard);//获得身份证号码
        if (code != string.Empty)
        {
            string year = code.Substring(6, 4);//获得身份证号码里面的年
            string month = code.Substring(10, 2);//获得身份证号码里面的月
            string day = code.Substring(12, 2);//获得身份证号码里面的日
            return year + "年" + month + "月" + day + "日";
        }
        else
        {
            return string.Empty;
        }
    }
阅读(2376) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~