Python身份证号码校验

img

img


这个是身份证号码校验的代码,不知道sum那个地方哪里出错了,怎么写才对?

该回答引用chatgpt:参考一下这个


import re

def validate_id_number(id_number):
    # 校验身份证号码的长度和格式
    pattern = re.compile(r'^\d{17}[\dXx]$')
    if not re.match(pattern, id_number):
        return False

    # 校验身份证号码的前17位数字
    factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
    checksum = 0
    for i in range(17):
        checksum += int(id_number[i]) * factor[i]

    # 校验身份证号码的校验位
    checksum %= 11
    check_digit = '10X98765432'[checksum]
    if id_number[-1].upper() != check_digit:
        return False

    return True

# 测试身份证号码校验
id_number = input("请输入身份证号码:")
if validate_id_number(id_number):
    print("身份证号码校验通过")
else:
    print("身份证号码校验不通过")

a[i]是字符啊,怎么乘法呢
你找个例子自己看下吧
https://blog.csdn.net/qq_52030824/article/details/126784418

a[i]
改为
int(a[i])
还有,return不要写到if里面