身份证号码编码规则18 位身份证号码编码规则:根据〖中华人民共和国国家标准GB 11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码可以用字母表示如为ABCDEFYYYYMMDDXXXR其含义如下:1.地址码 (ABCDEF ):表示编码对象常住户口所在县( 市、旗、区 ) 的行政区划代码,按GB/T2260 的规定执行2. 出生日期码 (YYYYMMDD):表示编码对象出生的年、月、日,按GB/T7408 的规定执行,年、月、日分别用4 位、 2 位(不足两位加0 )、 2 (同上)位数字表示,之间不用分隔符3.顺序码( XXX ):表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性4 . 校验码( R):一位数字,通过前17 位数字按照ISO 7064:1983.MOD 11-2 校验码计算得出15 位的身份证编码首先把出生年扩展为4 位,简单的就是增加一个19 ,但是这对于1900 年出生的人不使用(这样的寿星不多了)关于地址码含义的详细解释:身份证前六位是地区代码,我们用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 港、澳生日期码( YYYYMMDD )表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符例如:1981 年 5 月 11 日就用19810511 表示顺序码( XXX )(身份证第十五位到十七位)是县、区级政府所辖派出所的分配码,每个派出所分配码为10 个连续号码,例如“000- 009”或“060- 069”,其中单数为男性分配码,双数为女性分配码,如遇同年同月同日有两人以上时顺延第二、第三、第四、第五个分配码。
如:007 的就是个男生,而且和他同年月日生的男生至少有两个,他们的后四位是001* 和 003* 分配顺序码中“999、998 、997 、996 ”四个顺序号分别为男女性百岁以上老人专用的特定编号关于校验码18 位身份证最末位是校验码,是按一定的规则产生的,用于校验身份证真伪,按理这规则属于保密的, X 代表的是其中一个校验码,是10 校验码从0 到 X 共 11 个校验码是通过一系列数学计算得出来的,具体校验的计算方式如下:公式为: ∑(Ai×Wi)(mod 11)i—— 表示号码字符从右至左包括校验码在内的位置序号;Ai—— 表示第i 位置上的号码字符值;Wi—— 示第 i 位置上的加权因子(其值已定),其数值依据公式Wi=2^(i-1)(mod 11)计算得出其各位对应的值依次为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2例如:某男性公民身份号码为34052419800101001V(V 为校验码),对前17 位数字本体码首先按照上面公式加权求和计算:i:18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1Ai:34052419800101001VWi:79105842163791058421∑ (Ai×Wi) = ( 21 + 36 + 0 + 25 + 16 + 16 + 2 + 9 + 48 + 0 + 0 + 9 + 0 + 5 + 0 + 0 + 2 ) = 189∑ (Ai×Wi)(m od 11) = 189 mod 11 = 2然后根据计算的结果,从下面的表中查出相应的校验码。
其中X 表示计算结果为10 ∑(Ai×Wi)(mod 11):012345678910校验码字符值 V:10X9 8 7 6 5 4 3 2 根据上表,查出计算结果为2 的校验码为X,所以该人员的公民身份号码应该为34052419800101001X如果校验码不符合这个规则,则肯定是假号码关于18 位身份证号码尾数是“X” 的一种解释: 因为按照上面的规则,校验码有11 个, 而不是10 个,所以不能用0-9 表示所以如果尾号是10 ,那么就得用X 来代替,因为如果用10 做尾号,那么此人的身份证就变成了19 位,而 19 位的号码违反了国家标准,并且我国的计算机应用系统也不承认 19 位的身份证号码Ⅹ是罗马数字的10 ,用X 来代替10 ,可以保证公民的身份证符合国家标准// 省份证号码真伪识别程序,第一位号码不计在内#include #include using namespace std; int m ain() { char st[19]; int num[19],w[19],s=0; freopen(“num.txt“,“r“,stdin); freopen(“res.txt“,“w“,stdout);cin>>st; for(int i=1; i=3 return 0; } cout<<“\nError!\n“; return 0; }。