Saul's Space

利用python计算身份证校验码

字数统计: 322阅读时长: 1 min
2019/12/22 Share

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

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

undefined

比如身份证为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
CATALOG
  1. 1. 此处待填坑,先给出代码