当前位置: 首页  >  C#  >  将15位身份证转换成18位

将15位身份证转换成18位 TOP

 
  1. //*********************************************************************************   
  2.   //将15位身份证转换成18位时,首先把出生年扩展4位,就是在原来15位号码的第6为数字后   
  3.   //增加一个19,然后在第17位数字后添加一位校验码,校验码是由前17位数字本体码加权求   
  4.   //和公式,通过计算模,再通过模得到对应的校验码。   
  5.   //计算校验码公式   
  6.   //(1)17位数字本体码加权求和公式   
  7.   //S=Sum(Ai*Wi),i=0,...,16,先对前17位数字的权求和   
  8.   //Ai:表示第i位置上的身份证号码数字值   
  9.   //Wi:表示第i位置上的加权因子   
  10.   //Wi;7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2   
  11.   //   
  12.   //(2)计算模   
  13.   //Y=mod(S,11)   
  14.   //(3)通过模得到对应的校验码   
  15.   //Y:0 1 2 3 4 5 6 7 8 9 10   
  16.   //校验码:1 0 X 9 8 7 6 5 4 3 2   
  17.   //*****************************************************************************   
  18.   /// <summary>   
  19.   /// 将15位的身份证号码转换成18位的身份证好码   
  20.   /// </summary>   
  21.   /// <param name="idCard">身份证号码</param>   
  22.   /// <returns>返回18位身份证号码</returns>   
  23.   public static string Convert15to18 (string idCard)   
  24.   {   
  25.    string code = idCard.Trim();//获得身份证号码   
  26.    if (code.Length==15)//如果是15位则转换   
  27.    {              
  28.     char[] strJY ={ ''1''''0''''X''''9''''8''''7''''6''''5''''4''''3''''2'' };   
  29.     int[] intJQ ={ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 };   
  30.     string strTemp;   
  31.     int intTemp = 0;   
  32.     strTemp = code.Substring(0, 6) + "19" + code.Substring(6);   
  33.     for (int i = 0; i <= strTemp.Length - 1; i++)   
  34.     {   
  35.      intTemp = intTemp + int.Parse(strTemp.Substring(i, 1)) * intJQ[i];   
  36.     }   
  37.     intTemp = intTemp % 11;   
  38.     return strTemp + strJY[intTemp];   
  39.    }   
  40.    else  
  41.    {   
  42.     if (code.Length == 18)//如果是18位直接返回   
  43.     {   
  44.      return code;   
  45.     }   
  46.     return string.Empty;//如果即不是15位也不是18位则返回空   
  47.    }         
  48.   }   
  49.   /// <summary>   
  50.   /// 获得出身年月日   
  51.   /// </summary>   
  52.   /// <param name="idCard">身份证号码</param>   
  53.   /// <returns>返回出身年月日</returns>   
  54.   public static string GetBirth(string idCard)   
  55.   {   
  56.    string code = Convert15to18(idCard);//获得身份证号码   
  57.    if (code != string.Empty)   
  58.    {   
  59.     string year = code.Substring(6, 4);//获得身份证号码里面的年   
  60.     string month = code.Substring(10, 2);//获得身份证号码里面的月   
  61.     string day = code.Substring(12, 2);//获得身份证号码里面的日   
  62.     return year + "年" + month + "月" + day + "日";   
  63.    }   
  64.    else  
  65.    {   
  66.     return string.Empty;   
  67.    }   
  68.   }  

 

Views:1445   Posted at:2013-11-22
收藏 推荐 打印 | 录入:Admin | 阅读:0