>  기사  >  백엔드 개발  >  Python 정규식을 사용하여 ID 번호를 추출하는 방법

Python 정규식을 사용하여 ID 번호를 추출하는 방법

WBOY
WBOY원래의
2023-06-22 10:35:264123검색

데이터 처리 과정에서 텍스트에서 특정 형식의 정보를 추출해야 하는 경우가 종종 있습니다. ID번호는 상대적으로 흔한 개인정보로서 데이터 처리에 자주 사용됩니다. Python 정규식을 사용하여 ID 번호를 쉽게 추출하고 이에 대한 특정 확인을 수행할 수 있습니다.

ID카드번호는 ID번호에 지역, 생년월일, 인증번호를 포함하여 18자리로 구성됩니다. Python에서는 re 모듈의 정규식 함수를 사용하여 ID 번호를 추출할 수 있습니다.

먼저 ID 번호가 포함된 텍스트 파일을 준비해야 합니다. 파일 이름이 id_list.txt이고 각 줄에 ID 번호가 포함되어 있다고 가정합니다.

다음으로, 다음 코드를 사용하여 파일을 읽고 ID 번호를 추출할 수 있습니다.

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))'를 ID 번호와 일치시킵니다. 이 정규식에는 d{18}d{17}(d|X|x)라는 두 부분이 있습니다. 그 중 d{18}는 18자리가 일치한다는 의미, 즉 전체 ID 번호인 d{17}(d|X|x)는 17자리와 일치한다는 의미입니다. 마지막 숫자는 ID 번호의 숫자 또는 문자 X/x일 수 있습니다. | 기호를 사용하여 두 부분을 연결하면 전체 ID 번호와 ID 번호를 검사 코드와 동시에 일치시킬 수 있습니다. 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

re.findall 함수를 사용하여 텍스트의 정규식과 일치하는 모든 문자열을 일치시키고 일치하는 결과 목록을 반환합니다. 여기서는 추출된 ID 번호 목록을 id_list 변수에 저장합니다.

다음으로 추출된 ID번호를 확인할 수 있습니다. 신분증 번호의 확인 규칙은 관련 표준을 참조할 수 있으며, 여기에 간략하게 소개되어 있습니다.

인증 코드는 ID 번호의 마지막 숫자 또는 문자 X/x입니다. 이는 특정 알고리즘을 통해 처음 17자리에서 파생됩니다. 확인 코드의 계산 방법은 다음과 같습니다.
  1. 처음 17자리에 해당 중량 계수를 곱하여 17개의 제품을 얻습니다.
  2. 17개의 제품을 더하여 합계를 구합니다.
  3. 합계를 11로 나누어 A를 얻습니다.

  4. 나머지를 기준으로 검사 코드를 가져옵니다. 구체적인 대응은 다음과 같습니다. 나머지가 0이면 검사 코드는 1이고 나머지가 2이면 검사 코드는 0입니다. , 체크 코드는 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라는 함수를 정의합니다. 함수의 매개변수는 ID번호이고, 반환값은 인증코드이다.

마지막으로 루프에서 추출된 ID 번호를 확인할 수 있으며 올바른 확인 코드가 있는 ID 번호만 유지할 수 있습니다.

# 进行校验,并输出结果
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라는 빈 목록을 정의합니다. 올바른 ID 번호를 저장하는 데 사용됩니다. 확인 코드. 루프를 사용하여 추출된 모든 ID 번호를 순회하고 해당 확인 코드를 계산합니다. 확인 코드가 추출된 ID 번호의 확인 코드와 동일한 경우 해당 ID 번호를 valid_id_list에 추가합니다. 마지막으로, 올바른 인증 코드가 포함된 ID 번호 목록을 얻기 위해 valid_id_list를 출력합니다.

일반적으로 Python의 re 모듈과 정규식을 사용하면 텍스트에서 ID 번호를 쉽게 추출하고 이에 대한 특정 검증을 수행할 수도 있습니다. 이는 ID 번호와 같은 형식화된 정보를 처리하는 데 매우 유용합니다.

위 내용은 Python 정규식을 사용하여 ID 번호를 추출하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.