python身份证验证程序_python 身份证验证
#-*- coding: utf-8 -*-
importre#Errors=[‘驗證通過!‘,‘身份證號碼位數不對!‘,‘身份證號碼出生日期超出范圍或含有非法字符!‘,‘身份證號碼校驗錯誤!‘,‘身份證地區非法!‘]
defcheckIdcard(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)#地區校驗
if(not area[(idcard)[0:2]]):print 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 )):
erg=re.compile(‘[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=re.compile(‘[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)):printErrors[0]else:print 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=re.compile(‘[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=re.compile(‘[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]) * 3Y= S % 11M= "F"JYM= "10X98765432"M= JYM[Y]#判斷校驗位
if(M == idcard_list[17]):#檢測ID的校驗位
printErrors[0]else:print Errors[3]else:print Errors[2]else:print Errors[1]if __name__ == "__main__":whileTrue:
cdcard= raw_input(u"請輸入你的身份證號:")if cdcard == "exit":print u"程序已結束!"
break
else:
checkIdcard(cdcard)
總結
以上是生活随笔為你收集整理的python身份证验证程序_python 身份证验证的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python的Django框架中form
- 下一篇: 三星v版系统更新无法连接到服务器,美国V