import re
def check_id_card(id_card):
errors = ['驗證通過!', '身份證號碼位數不對!', '身份證號碼出生日期超出範圍或含有非法字元!', '身份證號碼校驗錯誤!', '身份證地區非法!']
area =
id_card = str(id_card)
id_card = id_card.strip() # 刪除前後空格
id_card_list = list(id_card)
# 地區校驗
if not area[id_card[0:2]]:
print(errors[4])
# 15位身份號碼檢測
if len(id_card) == 15:
if ((int(id_card[6:8]) + 1900) % 4 == 0 or (
(int(id_card[6:8]) + 1900) % 100 == 0 and (int(id_card[6:8]) + 1900) % 4 == 0)):
e_reg = 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:
e_reg = 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(e_reg, id_card):
print(errors[0])
else:
print(errors[2])
# 18位身份號碼檢測
elif len(id_card) == 18:
# 出生日期的合法性檢查
if int(id_card[6:10]) % 4 == 0 or (int(id_card[6:10]) % 100 == 0 and int(id_card[6:10]) % 4 == 0):
e_reg = 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:
e_reg = 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(e_reg, id_card):
# //計算校驗位
s = (int(id_card_list[0]) + int(id_card_list[10])) * 7 + (int(id_card_list[1]) +
int(id_card_list[11])) * 9 + (
int(id_card_list[2]) + int(id_card_list[12])) * 10 + (
int(id_card_list[3]) + int(id_card_list[13])) * 5 + (
int(id_card_list[4]) + int(id_card_list[14])) * 8 + (
int(id_card_list[5]) + int(id_card_list[15])) * 4 + (
int(id_card_list[6]) + int(id_card_list[16])) * 2 + int(id_card_list[7]) * 1 + int(
id_card_list[8]) * 6 + int(id_card_list[9]) * 3
y = s % 11
m = "f"
jym = "10x98765432"
m = jym[y] # 判斷校驗位
print(s)
print(y)
print(m)
if m == id_card_list[17]: # 檢測id的校驗位
print(errors[0])
else:
print(errors[3])
else:
print(errors[2])
else:
print(errors[1])
if __name__ == "__main__":
while true:
input_card = input(u"請輸入你的身份證號:")
if input_card == "exit":
print(u"程式已結束!")
break
else:
check_id_card(input_card)
身份證號碼
每乙個人自出生後都會有乙個身份證號碼。根據我國有關部門規定,公民身份號碼是特徵組合碼,由十七位數字本體碼和一位數字校驗碼組成。排列順序從左至右依次為 六位數字位址碼,八位數字出生日期碼,三位數字順序碼和一位數字校驗碼。居民身份證是國家法定的證明公民個人身份的有效證件。例如 對於身份證號碼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...
身份證號碼檢測
華為的上機題 我國公民的身份證號碼特點如下 1 長度為18位 2 第1 17位只能為數字 3 第18位可以是數字或者小寫英文本母x。4 身份證號碼的第7 14位表示持有人生日的年 月 日資訊。例如 511002 19880808 0111或511002 19880808011x。請實現身份證號碼合法...