python3校驗身份證號碼

2021-08-10 22:29:48 字數 2086 閱讀 8292

**適用於python3,直接從ide copy過來的,格式有點亂。

驗證規則如下:

長度必須為18位;

格式為:前17位是數字,最後一位是數字或者x(不區分大小寫);

前6位是地區碼,必須存在;

第7位到12位是出生日期,必須是存在的日期;

最後一位是驗證位,規則必須匹配;

輸入為乙個身份證號的字串;

輸出為乙個tuple:

0 - 是否是身份證;

1 - 錯誤資訊或者所屬地區;

import re

import datetime

defisidcard

(id_number):

area_dict =

id_code_list = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]

check_code_list = [1, 0, 'x', 9, 8, 7, 6, 5, 4, 3, 2]

if len(id_number) != 18:

return

false, "length error"

ifnot re.match(r"^\d(\d|x|x)$", id_number):

return

false, "format error"

if id_number[0:6] not

in area_dict:

return

false, "area code error"

try:

datetime.date(int(id_number[6:10]), int(id_number[10:12]), int(id_number[12:14]))

except valueerror as ve:

return

false, "datetime error: ".format(ve)

if str(check_code_list[sum([a * b for a, b in zip(id_code_list, [int(a) for a in id_number[0:-1]])]) % 11]) != \

str(id_number.upper()[-1]):

return

false, "check code error"

return

true, "{}省 {}市 {}".format(area_dict[id_number[0:2] + "0000"].rstrip("省"),

area_dict[id_number[0:4] + "00"].rstrip("市"),

area_dict[id_number[0:6]])

if __name__ == "__main__":

print(isidcard("330702196302260412x"))

print(isidcard("3307021963x226041x"))

print(isidcard("330702196hehe41x"))

print(isidcard("39070219630226041x"))

print(isidcard("33070219630229041x"))

print(isidcard("330702196302260410"))

print(isidcard("33070219630226041x"))

print(isidcard("33070219630226041x"))

列印結果如下:

(false, 'length error')

(false, 'format error')

(false, 'length error')

(false, 'area code error')

(false, 'datetime error: day is out of range for month')

(false, 'check code error')

(true, '浙江省 金華市 婺城區')

(true, '浙江省 金華市 婺城區')

身份證號碼校驗

中國居民身份證號碼編碼規則 中國居民身份證校驗碼演算法 都包含 author liuwei date 2020 11 19 身份證校驗工具 public class idnumutil 定義判別使用者身份證號的正規表示式 15位或者18位,最後一位可以為字母 string regularexpres...

Oracle 身份證號碼校驗

今天來了身份證校驗的需求,想在oracle中校驗後將錯誤資料查詢出來。於是我在網上查到了身份證校驗的oracle函式。但是發現一些正確的身份證號也未校驗通過!後來經過千辛萬苦的努力終於發現了,網上給的函式中判斷是否是閏年的 substrb 函式應該從第7為開始擷取,而不是第6位!還有要注意最後一位校...

JS校驗身份證號碼

function isidcardno num d 0 9 x test num 驗證前2位,城市符合 var acity if acity parseint num.substr 0,2 null alert 城市 acity parseint num.substr 0,2 下面分別分析出生日期和...