直接上代碼把:
小編一共寫了三個方法:a() , boolDcard(IDCrad) , boolDcardCheckCode(IDCrad)
慢慢看就可以知道各種的用處了
import regex as reg
# 身份證驗證類
WEIGHTS = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
IDCHECK = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
IDNUM = [18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2]
AREA = ["華北", "東北", "華東", "華中", "華南", "西南", "西北"]
PROVINCIAL = [["北京市", "天津市", "河北省", "山西省", "内蒙古自治區"],
["遼甯省", "吉林省", "黑龍江省"],
["上海市", "江蘇省", "浙江省", "安徽省", "福建省", "江西省", "山東省", "台灣省(886)"],
["河南省", "湖北省", "湖南省"],
["廣東省", "廣西壯族自治區", "海南省", "香港特别行政區(852)", "澳門特别行政區(853)"],
["四川省", "貴州省", "雲南省", "西藏自治區", "重慶市"],
["陝西省", "甘肅省", "青海省", "甯夏回族自治區", "新疆維吾爾自治區"]]
def a():
"""
判斷這個身份證是否正确
得出這個身份證一些基本資訊
"""
ID = input('請輸入十八位身份證号碼: ')
if len(ID) != 18:
print("錯誤的身份證号碼")
print("請重新輸入!")
a()
else:
print("你的身份證号碼是 " + ID)
ID_check = ID[17]
ID_aXw = 0
for i in range(len(WEIGHTS)):
ID_aXw = ID_aXw + int(ID[i]) * WEIGHTS[i]
ID_Check = ID_aXw % 11
if ID_check != IDCHECK[ID_Check]:
print('錯誤的身份證号碼')
a()
else:
print('正确的身份證号碼')
ID_add = ID[0:6]
ID_birth = ID[6:14]
ID_sex = ID[14:17]
year = ID_birth[0:4]
month = ID_birth[4:6]
day = ID_birth[6:8]
print("生日: " + year + '年' + month + '月' + day + '日')
if int(ID_sex) % 2 == 0:
print('性别:女')
else:
print('性别:男')
print("你來自:%s地區,%s" % (AREA[int(ID[0]) - 1], PROVINCIAL[int(ID[0]) - 1][int(ID[1]) - 1]))
# 二代身份證正規表達式
REGEX = r"^\d{6}(18|19|20)\d{2}(0\d|10|11|12)([0-2]\d|30|31)\d{3}(\d|X|x)$"
def boolDcard(IDCard):
"""
判斷 這個身份證是否正确
傳回 一個 bool 值
"""
if reg.search(REGEX, IDCard):
ID_check = IDCard[17]
ID_aXw = 0
for i in range(len(WEIGHTS)):
ID_aXw = ID_aXw + int(IDCard[i]) * WEIGHTS[i]
ID_Check = ID_aXw % 11
if ID_check != IDCHECK[ID_Check]:
return False
else:
return True
else:
return False
def boolDcardCheckCode(IDCard):
pass
"""
給定身份證前17位數
傳回這個身份證的校驗碼
"""
if len(IDCard) != 17:
return False
ID_aXw = 0
for i in range(len(WEIGHTS)):
ID_aXw = ID_aXw + int(IDCard[i]) * WEIGHTS[i]
ID_Check = IDCHECK[ID_aXw % 11]
return IDCard + ID_Check
if __name__ == "__main__":
print(boolDcard("362322199409103912"))
# a()