# -*- coding: utf-8 -*-import re
#errors=['驗證通過!','身份證號碼位數不對!','身份證號碼出生日期超出範圍或含有非法字元!','身份證號碼校驗錯誤!','身份證地區非法!']
def checkidcard(idcard):
errors=['驗證通過!','身份證號碼位數不對!','身份證號碼出生日期超出範圍或含有非法字元!','身份證號碼校驗錯誤!','身份證地區非法!']
area=
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][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-2][0-9]))[0-9]$')#//測試出生日期的合法性
else:
ereg=re.compile('[1-9][0-9][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]))[0-9]$')#//測試出生日期的合法性
if(re.match(ereg,idcard)):
print errors[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](19[0-9]|20[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-2][0-9]))[0-9][0-9xx]$')#//閏年出生日期的合法性正規表示式
else:
ereg=re.compile('[1-9][0-9](19[0-9]|20[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]))[0-9][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(m == idcard_list[17]):#檢測id的校驗位
print errors[0]
else:
print errors[3]
else:
print errors[2]
else:
print errors[1]
if __name__ == "__main__":
while true:
cdcard = raw_input(u"請輸入你的身份證號:")
if cdcard == "exit":
print u"程式已結束!"
break
else:
checkidcard(cdcard)
java實現 身份證號碼驗證
號碼的結構 公民身份號碼是特徵組合碼,由十七位數字本體碼和一位校驗碼組成。排列順序從左至右依次為 六位數字位址碼 八位數字出生日期碼 三位數字順序碼 和一位數字校驗碼 校驗碼的計算 1 十七位數字本體碼 加權求和公式 s sum ai wi i 0,16 先對前 17 位數字的權求和 ai 表示第 ...
身份證號碼
每乙個人自出生後都會有乙個身份證號碼。根據我國有關部門規定,公民身份號碼是特徵組合碼,由十七位數字本體碼和一位數字校驗碼組成。排列順序從左至右依次為 六位數字位址碼,八位數字出生日期碼,三位數字順序碼和一位數字校驗碼。居民身份證是國家法定的證明公民個人身份的有效證件。例如 對於身份證號碼330719...
身份證號碼驗證
說明 驗證身份證的有效性 引數 cid 身份證號碼 返回 地方 出生時間 性別 private string checkcidinfo string cid if cid.length 18 char c cid cid.length 1 bool last false if c 0 c 9 c a...