Python系列藏在身份证号码中的秘密
Python系列-你所不知道的身份证号码一、身份证号码结构解析
众所周知,我国现行身份证号码为18位,前6位为地区编码,中间8位为出生日期,2位派出所编码,1位性别编码,最后一位是校验位。
具体表达如下:
(1)第1至2位数字代表所在省(直辖市、自治区)的代码;
(2)权重第3至4位数字代表所在地级市(自治州)的代码;
(3)权重第5至6位数字代表所在区(县、自治县、县级市)的代码;
(4)权重第7-14位数字代表出生年、月、日;
(5)权重第15-16位数字代表所在的派出所代码;
(6)权重第17位数字表示性别,奇数表示男性,偶数表示女性;
(7)权重第18位是校验码,及个人信息码,由前17位数字计算得到。二、身份证号码是如何校验的?
身份证号码不是随便编制出来的,是有固定的数字编码和一种数字计算出来的校验位组成的。一个一二出生下来后,为什么当地PCS就可以根据出生证明上的数据,就可以在你家户口本上打印出来小孩的身份证号码。小孩的户籍地区编码是固定的,小孩的出生日期是固定的,入户籍的派出所编码是固定的,小孩的性别是确定的,根据前面的17位数字计算一个校验位,从而确定18位身份证号码。
身份证号码每一位的权重如下表所示,每一位的权重都是固定的。
序号
1
2
3
4
5
6
8
9
10
11
12
13
14
15
16
17
权重Wi
7
9
10
5
8
4
1
6
3
7
9
10
5
8
4
2
那怎样计算校验位呢?
Y=(ΣAi*Wi)mod11
计算出来的Y并不是最后的校验数,Y有个对应数,入下表所示:
Y
0
1
2
3
4
5
6
7
8
9
10
校验码
1
0
X
9
8
7
6
5
4
3
2
那如文章开头所示的身份证号码的校验位是如何计算的呢?计算过程如下:
Y=3*7+4*9+0*10+5*5+2*8+4*5+1*2+9*1+8*6+0*3+0*7+1*9+0*10+1*5+0*8+0*4+1*2=189mod11=2
数字2对应的校验码X,则身份证号码的最后一位是X,文章开头的身份证号校验通过。
三、身份证号码的权重又是如何计算的呢?
欢迎各位,作者还真不知道,欢迎各位网友在评论区留言告诉我。