第二代身份证编码规则 原理剖析及相关代码 18身份证号码编码规则一、身份证号码执行标准:18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999《公民身份号码》。GB11643-1999《公民身份号码》为GB11643-1989《社会保障号码》的修订版,其中指出将原标准名称社会保障号码更名为公民身份号码,另外GB11643-1999《公民身份号码》从实施之日起代替GB11643-1989。二、编码规则:公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位校验码,可以用字母表示如为ABCDEFYYYYMMDDXXXR。其含义如下:1.地址码(ABCDEF):表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。2.出生日期码(YYYYMMDD):表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日分别用4位、2位(不足两位加0)、2(同上)位数字表示,之间不用分隔符。3.顺序码(XXX):表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。4.校验码(R),一位数字,通过前17位数字根据一定计算得出。三、关于地址码含义的详细解释:身份证前六位是地区代码,我们用ABCDEF表示。代码的解释规则如下:A:国内区域1华北三省二市2东北三省3华东六省一市4华南六省5西南四省一市6西北五省7台湾8港澳B(或者说是AB,就是前2位):省(直辖市,自治区,特别行政区)代码按照A划定的分区定义省代码,有直辖市的,直辖市列前,其余按离直辖市的距离排序,没有直辖市的,按离北京的远近排序。具体省(直辖市,自治区,特别行政区)代码如下:11-15京津冀晋蒙21-23辽吉黑31-37沪苏浙皖闽赣鲁41-46豫鄂湘粤桂琼50-54渝川贵云藏61-65陕甘青宁新81-82港澳CD:城市代码从01开始排,对于直辖市,CD=01表示市辖区,CD=02表示辖县;省的城市代码从省会开始排,比如2101=沈阳2102=大连…只有地级城市有独立的城市代码,县级市没有。EF:市辖区、郊区、郊县、县级市代码如果EF=00,指代这个城市,不特定区县;对于非直辖市,如EF=01,指代市辖区(任意一个区),02开E=8代表郊县,E=2代表郊区,E=1代表市辖区,E=0始指代特定的区。其中: 代表县级市。对于直辖市,从01开始就依次排区,没有市区和郊区的代码区分。:有关更详细的资料见附录。四、生日期码(YYYYMMDD)表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。例如:1981年05月11日就用19810511表示。五、顺序码(XXX)(身份证第十五位到十七位)是县、区级政府所辖派出所的分配码,每个派出所分配码为10个连续号码,例如ぜ???或ぜ???,其中单数为男性分配码,双数为女性分配码,如遇同年同月同日有两人以上时顺延第二、第三、第四、第五个分配码。如:007的就是个男生,而且和他同年月日生的男生至少有两个,他们的后四位是001*和003*。分配顺序码中999、998、997、?尶四个顺序号分别为男女性百岁以上老人专用的特定编号。六、关于校验码校验码是通过一系列数学计算得出来的,具体校验的计算方式如下:1.对前17位数字本体码加权求和公式为:S=Sum(Ai*Wi),i=0,.,16其中Ai表示第i位置上的身份证号码数字值,Wi表示第i位置上的加权因子,其各位对应的值依次为:7 910 58 42 16 37 910 58 42通俗解释:身份证第一位数字X7+第二位X9+第三位X10+第四位X5+第五位X5+第六位X8+第七位X4+第八位X1+第九位X6+第十位X3+十一位X7+十二位X9+十三位X10+十四位X5+十五位X8+十六位X4+十七位X2;计算出总和(用S)表示。2.以11对计算结果取模Y=mod(S,11)通俗解释:用S除以11,看最后的余数。如果除尽,为0;余数为1,则计为1;最大余数为10;全部数字为0-10共11个数字。(用Y表示)。3.根据模的值得到对应的校验码对应关系为:Y值:0 12 34 56 78 910校验码:1 0X 98 76 54 32通俗解释:余数为0,则校验码为1;依次类推:余数为1,则校验码对应0;以下:2--X;3--9;4--8;5--7;6--6;7--5;8--4;9-3;10-2。如果校验码不符合这个规则,则肯定是假号码。关于18位身份证号码尾数是塜的一种解释:因为按照上面的规则,校验码有11个,而不是10个,所以不能用0-9表示。所以如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么此人的身份证就变成了19位,而19位的号码违反了国家标准,并且我国的计算机应用系统也不承认19位的身份证号码。Ⅹ是罗马数字的10,用X来代替10,可以保证公民的身份证符合国家标准。根据〖中华人民共和国国家标准GB 11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。15位升18的方法根据〖中华人民共和国〗中有关公民身份号码的规定,公民身份号码是特征GB 11643-1999国家标准. 组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。地址码表示编码对象常住户口所在县(市、旗、区)的行政区划代码。生日期码表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。顺序码表示同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。顺序码的奇数分给男性,偶数分给女性。校验码是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。下面举例说明该计算方法。15位的身份证编码首先把出生年扩展为4位,简单的就是增加一个19,但是这对于1900年出生的人不使用(这样的寿星不多了)。附录一:校验码的计算方法举例:某男性公民身份号码本体码为34052419800101001,首先按照公式(1)计算:∑(ai×Wi)mod 11…(1)公式(1)中:i--表示号码字符从右至左包括校验码在内的位置序号;ai--表示第i位置上的号码字符值;Wi--示第i位置上的加权因子,其数值依据公式Wi=(2的i-1次幂)(mod 11)计算得出。I 18 17 16 15 14 13 12 11 10 98 76 54 32 1Ai 34 05 24 19 80 01 01 00 1a1 Wi 79 10 58 42 16 37 910 58 42 1ai×Wi 21 36 025 16 16 29 48 00 90 50 02 a1根据公式(1)进行计算:∑(ai×Wi)=(21+36+0+25+16+16+2+9+48++0+0+9+0+5+0+0+2)=189 189÷11=17+2/11(余数为2)∑(ai×Wi)mod 11=2然后根据计算的结果,从下面的表中查出相应的校验码,其中X表示计算结果为10(男性为大写X;女性为小写x):∑(ai×WI)(mod 11)0 12 34 56 78 910校验码字符值ai 10 X9 87 65 43 2根据上表,查出计算结果为2的校验码为所以该人员的公民身份号码应该为34052419800101001 X。 本文来源:https://www.wddqw.com/doc/3369c0beec06eff9aef8941ea76e58fafbb04569.html