zoukankan      html  css  js  c++  java
  • 身份证号检验详解与更正

    (一)18身份证号码的结构 

    公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。

    排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位校验码。

    1、地址码   表示编码对象常住户口所在县(市、旗、区)的行政区域划分代码,按GB/T2260的规定执行。

    2、出生日期码   表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。

    3、顺序码   表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。

    4、校验码计算步骤

    (1)十七位数字本体码加权求和公式

    S = Sum(Ai * Wi), i = 0, … , 16 ,先对前17位数字的权求和

    Ai:表示第i位置上的身份证号码数字值(0~9)

    Wi:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 (表示第i位置上的加权因子)

    (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

    (二)根据17位数字本体码获取最后一位校验码程序实例 

    public class Id18 {
          int[] weight={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};    //十七位数字本体码权重
          char[] validate={ '1','0','X','9','8','7','6','5','4','3','2'};    //mod11,对应校验码字符值    
          
          public char getValidateCode(String id17){
              int sum = 0;
              int mode = 0;
              for(int i = 0; i < id17.length(); i++){
                  sum=sum+Integer.parseInt(String.valueOf(id17.charAt(i)))*weight[i];
             }
             mode = sum % 11;
             return validate[mode];
         }
         
         public static void main(String[] args){
             Id18 tes t= new Id18();
             System.out.println("该身份证验证码:"+test.getValidateCode("14230219700101101"));    //该身份证校验码:3
         }
     }

    (三)说明

    1.程序可以根据已有的17位数字本体码,获取对应的验证码。

    2.该程序可以剔除验证码不正确的身份证号码。

    3.15位的身份证出生年份采用年份后2位,没有最后1位校验码。

    4.完整的身份证18位,最后一位校验位可能是非数字。我们的一个项目,数据库保存前17位数字,这样对应一些SQL语句(比如inner join)有加速作用的!!!

  • 相关阅读:
    Truck History(poj 1789)
    Highways poj 2485
    117. Populating Next Right Pointers in Each Node II
    116. Populating Next Right Pointers in Each Node
    115. Distinct Subsequences
    114. Flatten Binary Tree to Linked List
    113. Path Sum II
    109. Convert Sorted List to Binary Search Tree
    106. Construct Binary Tree from Inorder and Postorder Traversal
    105. Construct Binary Tree from Preorder and Inorder Traversal
  • 原文地址:https://www.cnblogs.com/shadow-wolf/p/6214516.html
Copyright © 2011-2022 走看看