1. 简介
身份证是我们日常生活中必须携带的证件之一,在进行身份证信息核验时,我们需要了解其校验规则,该规则由公安部制定,采用了一种叫做“ISO 7064:1983.MOD 11-2”算法,也就是模11-2算法。该算法通过校验位来验证身份证号码的合法性,这篇文章将带你通过Python实现对身份证信息的校验。
2. 校验规则
2.1. 身份证号码格式
身份证号码由18位数字组成,组成结构如下:
6位地址码 + 8位年月日 + 3位顺序码 + 1位校验码
其中,年月日顺序为“年(4位)月(2位)日(2位)”,顺序码为同一地址码所标识的区域范围内,对同年同月同日出生的人员编订的顺序号,其中男性为奇数,女性为偶数,例如:第一个男性顺序号为“1”,第一个女性顺序号为“2”。
2.2. 校验码的计算方法
校验码的计算方法如下:
1. 身份证前17位依次乘以对应的系数:(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)
2. 将这17位数字和系数相乘的结果相加
3. 将相加后的结果除以11,取余数
4. 根据余数的值从校验码集合中选择对应的校验码:(1, 0, "X", 9, 8, 7, 6, 5, 4, 3, 2)
例如,身份证号码为“130503670401001”的校验码计算步骤是:
1. (1*1 + 4*3 + 0*0 + 0*5 + 1*0 + 3*4 + 6*2 + 7*6 + 0*3 + 4*7 + 0*9 + 1*10 + 0*5 + 0*8 + 1*4 + 0*2) = 239
2. 239 % 11 = 7
3. 选择校验码集合中下标为7的数,即校验码为“6”
3. Python实现
3.1. 实现思路
根据校验规则,我们可以通过字符串切片和循环函数来实现身份证信息的解析和计算校验码,其中需要注意的是:字符串中数字字符需要转换为整数类型。
3.2. 代码实现
下面是Python实现的完整代码:
def check_id_card(id_card: str) -> bool:
"""校验身份证号码"""
id_card_factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
id_card_code = [1, 0, "X", 9, 8, 7, 6, 5, 4, 3, 2]
if len(id_card) != 18:
return False
id_card_list = []
for ch in id_card[:17]:
if ch.isdigit():
id_card_list.append(int(ch))
else:
return False
id_card_sum = sum(map(lambda x, y: x * y, id_card_list, id_card_factor))
id_card_mod = id_card_sum % 11
id_card_check_code = str(id_card_code[id_card_mod])
if id_card_check_code != id_card[-1]:
return False
return True
4. 结论
本文介绍了身份证信息的校验规则以及Python实现,通过校验位来验证身份证号码的合法性,有效避免了非法身份证信息的注册和实名认证。在真正的生产环境中,我们需要根据实际情况,完善身份证信息校验的相关功能,确保用户提交的数据的真实性和合法性。