Python身份证校验代码
Python⾝份证校验代码
光棍节短信Python ⾝份证校验代码
居民⾝份证bai编号识别  1、⾝份证编码规则如下:根据〖中华⼈民共和国国家标准GB11643-1999〗中有关公民⾝份号码的规定,公民⾝份号码是特征组合码,由⼗七位数字本体码和⼀位数字校验码组成。排列顺序从左⾄右依次为:六位数字地址码,⼋位数字出⽣⽇期码,三位数字顺序码和⼀位数字校验码。  地址码(⾝份证前六位)表⽰编码对象第⼀次申领居民⾝份证时的常住户⼝所在县(市、旗、区)的⾏政区划代码。(所有区域的编码可以到⽹站查询到最新的县及县以上的⾏政编码资料。)  ⽣⽇期码(⾝份证第七位到第⼗四位)表⽰编码对象出⽣的年、⽉、⽇,其中年份⽤四位数字表⽰,年、⽉、⽇之间不⽤分隔符。例如:1981年05⽉11⽇就⽤19810511表⽰。  顺序码(⾝份证第⼗五位到⼗七位)是县、区级政府所辖派出所的分配码,每个派出所分配码为10个连续号码,例如“000-009”或“060-069”,其中单数为男性分配码,双数为⼥性分配码,如遇同年同⽉同⽇有两⼈以上时顺延第⼆、第三、第四、第五个分配码。如:007的就是个男⽣,⽽且和他同年⽉⽇⽣的男⽣⾄少有两个,他们的后四位是001和003。分配顺序码中“999、998、997、996”四个顺序号分别为男⼥性百岁以上⽼⼈专⽤的特定编号。  校验码(⾝份证最后⼀位)是根据前⾯⼗七位数字码,按照ISO7064:1983.MOD11-2校验码计算出来的检验码。  2、从1999年10⽉1⽇起,全国实⾏公民⾝份证号码制度,居民⾝份证编号由原15位升⾄18位。前6位为地址码;第七位⾄14位为出⽣⽇期码,此码由6位数改为8位数,其中年份⽤4位数表⽰;第15位
⾄17位为顺序码,取消了顺序码中对百岁⽼⼈使⽤的特定编号;第⼗⼋位为校验码,主要是为了校验计算机输⼊公民⾝份证号码的前17位数字是否正确,其取值范围是0⾄10,当值等于10时,⽤罗马数字符χ表⽰。  三、⾝份证第18位(校验码)的计算⽅法  1、将前⾯的⾝份证号码17位数分别乘以不同的系数。从第⼀位到第⼗七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。  2、将这17位数字和系数相乘的结果相加。  3、⽤加出来和除以11,看余数是多少?  4、余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字。其分别对应的最后⼀位⾝份证的号码为1-0-X-9-8-7-6-5-4-3-2。  5、通过上⾯得知如果余数是2,就会在⾝份证的第18位数字上出现罗马数字的Ⅹ。如果余数是10,⾝份证的最后⼀位号码就是2。  例如:某男性的⾝份证号码是340524************。我们要看看这个⾝份证是不是合法的⾝份证。  ⾸先我们得出前17位的乘积和是189,然后⽤189除以11得出的结果是17+2/11,也就是说其余数是2。最后通过对应规则就可以知道余数2对应的数字是x。所以,可以判定这是⼀个合格的⾝份证号码。
import re
def checkIdcard(idcard):
Errors = ['验证通过!', '⾝份证号码位数不对!', '⾝份证号码出⽣⽇期超出范围或含有⾮法字符!', '⾝份证号码校验错误!', '⾝份证地区⾮法!']
area = {"11": "北京", "12": "天津", "13": "河北", "14": "⼭西", "15": "内蒙古", "21": "辽宁", "22": "吉林", "23": "⿊龙江",
徐海乔恋情曝光"31": "上海",
"32": "江苏", "33": "浙江", "34": "安徽", "35": "福建", "36": "江西", "37": "⼭东", "41": "河南", "42": "湖北", "43": "湖南",
背景虚化
"44": "⼴东", "45": "⼴西", "46": "海南", "50": "重庆", "51": "四川", "52": "贵州", "53": "云南", "54": "西藏", "61": "陕西",
"62": "⽢肃", "63": "青海", "64": "宁夏", "65": "新疆", "71": "台湾", "81": "⾹港", "82": "澳门", "91": "国外"}
idcard = str(idcard)
idcard = idcard.strip()
idcard_list = list(idcard)
# 地区校验
key = idcard[0: 2]  # TODO: cc  地区中的键是否存在
if key in area.keys():
if (not area[(idcard)[0:2]]):
return Errors[4]
else:
return Errors[4]
# 15位⾝份号码检测
if (len(idcard) == 15):
if ((int(idcard[6:8]) + 1900) % 4 == 0 or (
(int(idcard[6:8]) + 1900) % 100 == 0 and (int(idcard[6:8]) + 1900) % 4 == 0)):玫瑰代表什么
ereg = repile(
'[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$')  # //测试出⽣⽇期的合法性
else:
ereg = repile(
'[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$')  # //测试出⽣⽇期的合法性
if (re.match(ereg, idcard)):
return Errors[0]
else:
return Errors[2]
# 18位⾝份号码检测
elif (len(idcard) == 18):
# 出⽣⽇期的合法性检查
# 闰年⽉⽇:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))
# 平年⽉⽇:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))
if (int(idcard[6:10]) % 4 == 0 or (int(idcard[6:10]) % 100 == 0 and int(idcard[6:10]) % 4 == 0)):
ereg = repile(
'[1-9][0-9]{5}(19[0-9]{2}|20[0-9]{2})((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$')  # //闰年出⽣⽇期的合法性正则表达式
else:
ereg = repile(
'[1-9][0-9]{5}(19[0-9]{2}|20[0-9]{2})((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]
|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$')  # //平年出⽣⽇期的合法性正则表达式        # //测试出⽣⽇期的合法性
if (re.match(ereg, idcard)):
# //计算校验位
S = (int(idcard_list[0]) + int(idcard_list[10])) * 7 + (int(idcard_list[1]) + int(idcard_list[11])) * 9 + (
int(
idcard_list[2]) + int(idcard_list[12])) * 10 + (
int(idcard_list[3]) + int(idcard_list[13])) * 5 + (int(
idcard_list[4]) + int(idcard_list[14])) * 8 + (int(idcard_list[5]) + int(idcard_list[15])) * 4 + (int(
idcard_list[6]) + int(idcard_list[16])) * 2 + int(idcard_list[7]) * 1 + int(idcard_list[8]) * 6 + int(
idcard_list[9]) * 3
Y = S % 11
M = "F"
JYM = "10X98765432"
M = JYM[Y]  # 判断校验位
上将排名if idcard_list[17] in ['X', 'x']:
idcard_list[17] = 'X'
if (M == idcard_list[17]):  # 检测ID的校验位
return Errors[0]
else:
return Errors[3]
else:
导游资格
return Errors[2]
else:
return Errors[1]
转载:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。