日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python正则抓取身份证号码,验证18位身份证号码是否正确

發布時間:2023/12/20 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python正则抓取身份证号码,验证18位身份证号码是否正确 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

python正則抓取身份證號碼

ID_c=r'(?<!\d)(?:(?:([1-9]\d{5}(?:18|19|(?:[23]\d))\d{2}(?:(?:0[1-9])|(?:10|11|12))(?:(?:[0-2][1-9])|10|20|30|31)\d{3}[0-9Xx])(?!\d))|([1-9]\d{5}\d{2}(?:(?:0[1-9])|(?:10|11|12))(?:(?:[0-2][1-9])|10|20|30|31)\d{3}))(?!\d)' ID = re.findall(ID_c,text) ID = list(map(lambda x:''.join(x) ,ID))

簡要分析:
18位身份證號匹配:

(?:(?:([1-9]\d{5}(?:18|19|(?:[23]\d))\d{2}(?:(?:0[1-9])|(?:10|11|12))(?:(?:[0-2][1-9])|10|20|30|31)\d{3}[0-9Xx])(?!\d))

15位身份證號匹配:

([1-9]\d{5}\d{2}(?:(?:0[1-9])|(?:10|11|12))(?:(?:[0-2][1-9])|10|20|30|31)\d{3})

簡單的排除一些錯誤的匹配:
1,身份證號前面的字符不為數字:

(?<!\d)

2,身份證號后面的字符不為數字:

(?!\d)

驗證身份證號碼是否正確

代碼驗證18位號碼是否正確

# t代表身份證號碼的位數,w表示每一位的加權因子 t = [] w = [] for i in range(0,18):t1 = i + 1t.append(t1)w1 = (2 ** (t1-1)) % 11w.append(w1) #隊列w要做一個反序 w = w[::-1] #根據前17位的余數,計算第18位校驗位的值 def for_check(n):# t = 0for i in range(0,12):if (n + i) % 11 == 1:t = i % 11if t == 10:t = 'X'return t#根據身份證的前17位,求和取余,返回余數 def for_mod(id):sum = 0for i in range(0,17):sum += int(id[i]) * int(w[i])# print(int(id[i]),int(w[i]),sum)sum = sum % 11# print(sum)return sum#驗證18位身份證有效性 def check_true(id):# print(for_check(for_mod(id[:-1])))if id[-1] == 'X':if for_check(for_mod(id[:-1])) == 'X':return Trueelse:return Falseelse:if for_check(for_mod(id[:-1])) == int(id[-1]):return Trueelse:return False

提取18位身份證號碼并驗證:

id_15=[] id_18=[] for i in ID:if len(i)==18:id_18.append(i)continueif len(i)==15:id_15.append(i)continueelse:#打印長度非18和15位的身份證號碼print(i) # id_=data['身份證號碼'] for i in id_18:if check_true(str(i))==False:# 打印驗證錯誤的身份證號print(i)

驗證工具

以上代碼只是驗證了規則的正確性,但是對于地址位是否是有實際意義沒有驗證
Python大陸居民身份證、港澳臺居民居住證驗證工具 :https://github.com/jxlwqq/id-validator.py

jupyter 嵌入網頁驗證工具

只是為了方便驗證一下

from IPython.display import IFrame IFrame('http://welefen.com/lab/id/index.php', width=800, height=300)

總結

以上是生活随笔為你收集整理的python正则抓取身份证号码,验证18位身份证号码是否正确的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。