python之正则表达式的中国居民身份证校验码算法

img


目前在自学python,对正则表达式不熟悉,这类问题难以处理,求解

import re

def is_valid_id_number(id_number):
    # 身份证号正则表达式
    pattern = r'^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])\d{3}[0-9X]$'

    # 匹配身份证号
    match = re.match(pattern, id_number)

    if match:
        # 计算校验码
        factors = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
        checksum = sum(int(id_number[i]) * factors[i] for i in range(17)) % 11
        checksum_dict = {0: '1', 1: '0', 2: 'X', 3: '9', 4: '8', 5: '7', 6: '6', 7: '5', 8: '4', 9: '3', 10: '2'}
        expected_checksum = checksum_dict[checksum]

        # 判断校验码是否正确
        if expected_checksum == id_number[-1]:
            return True
        else:
            return False
    else:
        return False

# 从键盘输入身份证号
id_number = input("请输入身份证号码:")

# 判断身份证号是否合法
if is_valid_id_number(id_number):
    print("身份证号合法")
else:
    print("身份证号不合法")

你可以在 C 站自行搜索一下,内容很多