|
发表于 2015-12-7 18:27:11
|
显示全部楼层
看了这段代码我稍微改了一下,python3能用
import time
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.strip())
if idcard[0:2] not in area:
return errors[4]
if len(idcard) not in (15,18):
return errors[1]
if (len(idcard)==15 and idcard.isdigit()==False) or (len(idcard)==18 and idcard[0:-1].isdigit()==False):
return errors[2]
if len(idcard)==15 and idcard.isdigit():
birth = '19'+idcard[6:12]
if len(idcard)==18 and idcard[0:-1].isdigit():
birth = idcard[6:14]
try:
checkBirth = time.strptime(birth,'%Y%m%d')
if len(idcard)==15:
return errors[0]
else:
S = (int(idcard[0]) + int(idcard[10])) * 7 +(int(idcard[1]) + int(idcard[11])) * 9 +(int(idcard[2]) + int(idcard[12])) * 10 +(int(idcard[3]) + int(idcard[13])) * 5 +(int(idcard[4]) + int(idcard[14])) * 8 +(int(idcard[5]) + int(idcard[15])) * 4 +(int(idcard[6]) + int(idcard[16])) * 2 +int(idcard[7]) * 1 + int(idcard[8]) * 6 +int(idcard[9]) * 3
Y = S % 11
JYM = "10X98765432"
M = JYM[Y]
if M == idcard[17]:
return errors[0]
else:
return errors[3]
except ValueError:
return errors[2]
id = input('请输入身份证:')
print(checkIdcard(id)) |
|