传统的身份证一共18位,其中最后一位是验证码。
首先,前六位是地区码,中间八位是生日,再三位可以理解是是出生顺序码+男女编码。
比如身份证为320204199902120105的人
1999年2月12日,出生于江苏无锡梁溪区(320204)的一名女孩(倒数第二位的“0”),是该地区第一个出生的(01)
还有最后一位是校验码,用来验证你前面的身份证码是不是瞎填的。
此处待填坑,先给出代码
#计算前17位的权重,打印出权重列表
weight_list=[]
num=list(range(1,18))
fun=lambda i:(2**(18-i))%11
weight_list=list(map(fun,num))
print(weight_list)
>[7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
#计算验证码的主程序
def examine(certificate):
#验证位数是否正确
if not len(str(certificate))==17:
print('false information')
else:
certificate_number_list=[int(h) for h in str(certificate)]
#权重相乘
result=sum([x*y for x,y in zip(certificate_number_list,weight_list)])
#下列是大量取余运算
mod_result=result%11
sub_result=12-mod_result
doublemod_result=sub_result%11 #末尾为10则返回‘x'
if doublemod_result==10:
examinor='x'
else:
examinor=str(doublemod_result)
#打印校验码和完整的身份证号码
print(examinor)
print('Your full certificate number is'+ '\n'+str(certificate)+examinor)
调用函数
examine(32020119990212341)
得出结果
> 7
> Your full certificate number is
320201199902123417