首頁  >  文章  >  後端開發  >  如何使用Python正規表示式進行身分證號碼擷取

如何使用Python正規表示式進行身分證號碼擷取

WBOY
WBOY原創
2023-06-22 10:35:264125瀏覽

在資料處理的過程中,經常需要從文字中提取特定格式的資訊。而身分證號碼作為一種比較常見的個人訊息,在資料處理中也常被用到。使用Python正規表示式可以方便地提取身分證號碼,並且還能對其進行一定的驗證。

身分證號碼是由18位數組成的,包含了身分證號碼中的地區、出生年月日和校驗碼等資訊。在Python中,我們可以使用re模組的正規表示式函數來提取身分證號碼。

首先,我們需要準備一個包含身分證號碼的文字檔案。假設檔案名稱為id_list.txt,其中每行包含一個身分證號碼。

接下來,我們可以使用以下程式碼來讀取檔案並提取身分證號碼:

import re

# 读取文件
with open('id_list.txt', 'r') as f:
    content = f.read()

# 使用正则表达式匹配身份证号码
pattern = r'd{18}|(d{17}(d|X|x))'
id_list = re.findall(pattern, content)

在上面的程式碼中,我們使用了正規表示式r'd{ 18}|(d{17}(d|X|x))'來符合身分證號碼。此正規表示式中有兩部分,分別為d{18}d{17}(d|X|x)。其中,d{18}表示符合18位元數字,即完整的身分證號碼;d{17}(d|X|x)表示符合17位元數字和最後一位元可能為數字或字母X/x的身分證號碼。透過使用|符號連接兩部分,我們可以同時匹配完整的身份證號碼和帶有校驗碼的身份證號碼。

使用re.findall函數可以在文字中符合所有符合正規表示式的字串,並傳回符合結果的清單。在這裡,我們將提取到的身份證號碼清單保存到id_list變數中。

接下來,我們可以對提取到的身分證號碼進行校驗。身分證號碼的校驗規則可以參考相關標準,這裡簡單介紹一下。

校驗碼是身分證號碼中的最後一位數字或字母X/x,它是由前17位數字透過一定的演算法得出的。校驗碼的計算方法如下:

  1. 將前17位數字分別乘以對應權係數,得到17個乘積;
  2. 將17個乘積相加,得到一個總和;
  3. 將總和除以11,得到一個餘數;
  4. 根據餘數得到校驗碼,具體對應關係如下:餘數為0時,校驗碼為1;餘數為1時,校驗碼為0;
    餘數為2時,校驗碼為X/x;餘數為3-10時,校驗碼為11減餘數。

以下是校驗碼的Python程式碼實作:

# 校验码计算
def check_code(id_num: str) -> str:
    if len(id_num) == 18:
        factor_list = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
        check_list = list(id_num[:-1])
        check_sum = sum([int(check_list[i]) * factor_list[i] for i in range(17)])
        check_num = (12 - check_sum % 11) % 11
        if check_num == 0:
            return '1'
        elif check_num == 1:
            return '0'
        elif check_num == 2:
            return 'X'
        else:
            return str(12 - check_num)
    else:
        return ''

在上述程式碼中,我們定義了一個名為check_code的函數來計算身分證號碼的校驗碼。函數的參數為身分證號碼,傳回值為校驗碼。

最後,我們可以在循環中對提取到的身份證號碼進行校驗,只保留校驗碼正確的身份證號碼:

# 进行校验,并输出结果
valid_id_list = []
for id_num in id_list:
    # 计算校验码
    code = check_code(id_num[0])
    if code and code == id_num[0][-1]:
        valid_id_list.append(id_num[0])
print(valid_id_list)

在上述代碼中,我們定義了一個名為valid_id_list的空白列表,用來儲存校驗碼正確的身分證號碼。使用循環遍歷所有提取到的身份證號碼,計算其校驗碼,如果校驗碼與提取到的身份證號碼中的校驗碼相同,就將該身份證號碼添加到valid_id_list中。最後,我們輸出valid_id_list,即可得到校驗碼正確的身分證號碼清單。

總的來說,使用Python的re模組和正規表示式可以方便地從文字中提取身分證號碼,並且還能對其進行一定的驗證。這對於身份證號碼等格式化資訊的處理是非常有幫助的。

以上是如何使用Python正規表示式進行身分證號碼擷取的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn