python身份证号判断_Python实现身份证号码解析

中国的居民身份证有18位。其中前17位是信息码,最后1位是校验码。每位信息码可以是0-9的数字,而校验码可以是0-9或X,其中X表示10。

身份证校验码算法:

设18位身份证号序列从左到右为:

引用

a[0], a[1], a[2], a[3], ..., a[16], a[17]

其中a[i]表示第i位数字,i=0,1,2,...,17,如果最后一位(校验位)是X,则a[17]=10

每一位被赋予一个“权值”,其中,第i位的权值w[i]的计算方法是:

引用

w[i] = 2**(17-i) % 11

其中,i=0,1,2,3,...,17,运算符按python惯例:x**y表示x的y次方,x%y表示x除以y的余数。

如果一个身份证号是正确的,那么:

引用

(a[0]*w[0] + a[1]*w[1] + a[2]*w[2] + ... + a[16]*w[16] + a[17]*w[17]) % 11 == 1

实际上,校验位a[17]的计算方法,就是巧妙地选择一个值使得上式成立。

根据上述算法,下面是一个验证身份证号正确性的程序。

初学者————代码没有什么依照编写规范,流水账的模式。还有两个功能没有实现:

1、依照身份证号码的区域代码解析所在区域;

2、将身份证校验码的校验作为前置判断,如果错误就不再解析其他内容,汗,我还不会; ID=input('请输入十八位身份证号码: ')

if len(ID)==18:

print("你的身份证号码是 "+ID)

else:

print("错误的身份证号码")

ID_add=ID[0:6]

ID_birth=ID[6:14]

ID_sex=ID[14:17]

ID_check=ID[17]

#ID_add是身份证中的区域代码,如果有一个行政区划代码字典,就可以用获取大致地址#

year=ID_birth[0:4]

moon=ID_birth[4:6]

day=ID_birth[6:8]

print("生日: "+year+'年'+moon+'月'+day

你可能感兴趣的:(python身份证号判断)