def check_id_card(idcard):
errors = ['驗證通過!', '身份證號碼位數不對!', '身份證號碼出生日期超出範圍或含有非法字元!', '身份證號碼校驗錯誤!', '身份證地區非法!']
area =
idcard = str(idcard)
idcard = idcard.strip()
idcard_list = list(idcard)
# 地區校驗
key = idcard[0: 2] # todo: cc 地區中的鍵是否存在
if key in area.keys():
if (not area[(idcard)[0:2]]):
return errors[4]
else:
return 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)):
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-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)):
return errors[0]
else:
return 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的校驗位
return errors[0]
else:
return errors[3]
else:
return errors[2]
else:
return errors[1]
正規表示式之身份證號驗證
分析 身份證的號碼結構為 身份證前六位 表示編碼物件常住戶口所在縣 市 旗 區 的行政區劃 身份證第七位到第十四位 表示編碼物件出生的年 月 日,其中年份用四位數字表示,年 月 日之間不用分隔符。例如 1981年05月11日就用19810511表示。身份證第十五位到十七位 為同一位址碼所標識的區域範...
用正規表示式驗證身份證號
用正規表示式驗證身份證號 開發工具與關鍵技術 vs mvc在現在的資訊時代,個人的資訊真假難辨,但身份證號就是唯一的,也正因如此我們的資訊錄入都離不開身份證的使用。有了身份證的廣泛使用,同時驗證身份證號碼的知識也被廣泛應用,而我現在要說的就是用正規表示式驗證身份證號碼。在這裡我會以乙個包含新增身份證...
正規表示式 判斷身份證號
判斷身份證是否正確 param value 身份證號 return yes or no bool judgeidcardlegal nsstring value bool judgeidcardlegal nsstring value else 省份 nsarray areasarray 11 12...