在資料處理的過程中,經常需要從文字中提取特定格式的資訊。而身分證號碼作為一種比較常見的個人訊息,在資料處理中也常被用到。使用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位數字透過一定的演算法得出的。校驗碼的計算方法如下:
以下是校驗碼的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中文網其他相關文章!