判断是否为有效的身份证号码的函数
发布时间:2023-06-26 03:54:35
身份证号码是每个中国公民所必须具备的一个重要的身份标识符,它不仅可以证明个人的身份,还可以用于办理各类证件及进行各种交易,因此,身份证号码的正确性是极为重要的。
那么,如何判断一个身份证号码是否有效呢?本文将介绍如下方法:
1. 前17位的数字必须全部为数字,最后一位可以是数字或字母X。
2. 如果最后一位是数字,那么根据ISO7064:1983.MOD 11-2校验码计算方法,将前17位的数字按照权值乘以系数相加,并将结果除以11,余数为0~10中的一个,这个余数对应的校验位数字就是最后一位。
3. 如果最后一位是字母X,那么按照ISO7064:1983.MOD 11-2校验码计算方法,将前17位的数字按照权值乘以系数相加,并将结果加上10,再除以11,如果余数为10,则校验位为字母X,否则校验位为对应的数字。
下面是一个Python函数的实现,用于判断一个身份证号码是否有效:
def validate_id_card(id_card):
# 判断身份证号码是否符合规则
if not re.match(r'^\d{17}[\dX]$', id_card):
return False
# 计算校验码
factors = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
checksums = {'0': '1', '1': '0', '2': 'X', '3': '9', '4': '8', '5': '7', '6': '6', '7': '5', '8': '4', '9': '3', '10': '2'}
last_char = id_card[-1]
if last_char.isdigit():
weights = [int(c) for c in id_card[:-1]]
checksum = sum(w * f for w, f in zip(weights, factors)) % 11
return last_char == checksums[str(checksum)]
else:
weights = [int(c) for c in id_card[:-1]] + [10]
checksum = sum(w * f for w, f in zip(weights, factors)) % 11
return last_char.upper() == checksums[str(checksum)]
上述函数使用了正则表达式对身份证号码进行格式校验,然后根据ISO7064:1983.MOD 11-2校验码计算方法计算校验码,并与最后一位进行比较,返回是否有效的结果。
如果要将这个函数应用到实际的业务中,可以在接收用户输入身份证号码时进行调用,并根据返回结果进行相应的处理,例如提示用户输入正确的身份证号码、阻止用户进行下一步操作等。同时,为了确保输入的身份证号码是有效的,还可以在后端进行再次校验,例如在数据库中查找是否存在该身份证号码等。
