利用python计算身份证校验码

传统的身份证一共18位,其中最后一位是验证码。

首先,前六位是地区码,中间八位是生日,再三位可以理解是是出生顺序码+男女编码。

undefined

比如身份证为320204199902120105的人

1999年2月12日,出生于江苏无锡梁溪区(320204)的一名女孩(倒数第二位的“0”),是该地区第一个出生的(01)
还有最后一位是校验码,用来验证你前面的身份证码是不是瞎填的。

此处待填坑,先给出代码

#计算前17位的权重,打印出权重列表weight_list=[]num=list(range(1,18))fun=lambda i:(2**(18-i))%11weight_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 is320201199902123417