正規表示式驗證身份證號合理性

2021-09-26 05:41:14 字數 2841 閱讀 6899

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...