zoukankan      html  css  js  c++  java
  • 将15位身份证转换成18位

     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   }
  • 相关阅读:
    swing之jtable的详细介绍
    JSplitPane类测试实例
    在桌面应用中使用JAVA DB[组图]
    java线程池主线程等待子线程执行完成后再继续处理后面工作
    Cannot load 64bit SWT libraries on 32bit JVM 解决方法
    Cannot load 64bit SWT libraries on 32bit JVM
    java程序的皮肤效果实现代码
    Java设置窗口大化时大小
    Java Swing 组件全演示
    Java 线程池详解
  • 原文地址:https://www.cnblogs.com/ezplusy/p/3437529.html
Copyright © 2011-2022 走看看