Python 身份证号
身份证号是中国公民的唯一身份标识符,它由18位数字组成,包含个人的基本信息和校验码。在许多应用中,我们需要对身份证号进行验证、解析和处理。Python作为一种强大的编程语言,提供了丰富的库和函数来处理身份证号。
身份证号的结构
身份证号由18位数字组成,每一位都有特定的含义。下面是身份证号的结构:
| 1-6位 | 7-14位 | 15-17位 | 18位 |
| 地址码 | 生日码 | 顺序码 | 校验码 |
- 地址码(1-6位):表示身份证持有人所在的行政区划代码,省市区各自有固定的编码。例如,北京的编码为110000。
- 生日码(7-14位):表示身份证持有人的出生日期,格式为YYYYMMDD。
- 顺序码(15-17位):表示在同一地址码和出生日期下,同一地区的顺序号。
- 校验码(18位):根据前面的17位数字计算得出,用于验证身份证号的合法性。
身份证号的校验
每个身份证号的最后一位是校验码,用于验证身份证号的合法性。校验码的计算规则如下:
- 将身份证号的前17位数字分别乘以对应的权重因子,从左到右依次为7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2。
- 将上述结果求和并取模,得到一个余数。
- 根据余数在校验码对照表中查找对应的值,将其作为身份证号的最后一位校验码。
下面是校验码对照表:
| 余数 | 校验码 |
| 0 | 1 |
| 1 | 0 |
| 2 | X |
| 3 | 9 |
| 4 | 8 |
| 5 | 7 |
| 6 | 6 |
| 7 | 5 |
| 8 | 4 |
| 9 | 3 |
| 10 | 2 |
现在,我们来编写一个函数来验证身份证号的合法性:
def validate_id_number(id_number):
# 校验码对照表
check_codes = {
0: '1', 1: '0', 2: 'X', 3: '9', 4: '8',
5: '7', 6: '6', 7: '5', 8: '4', 9: '3',
10: '2'
}
# 权重因子
weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
# 验证长度和格式
if not isinstance(id_number, str) or len(id_number) != 18 or not id_number[:-1].isdigit():
return False
# 计算校验码
checksum = sum([int(digit) * weight for digit, weight in zip(id_number[:-1], weights)]) % 11
check_code = check_codes.get(checksum)
# 验证校验码
return id_number[-1] == check_code
解析身份证号
除了验证身份证号的合法性,我们还可以将身份证号解析成更有用的信息,比如性别、出生日期和所在地区。下面是一个解析身份证号的函数:
def parse_id_number(id_number):
# 地址码对照表
address_codes = {
'11': '北京市', '12': '天津市', '13': '河北省', '14': '山西省', '15': '内蒙古自治区',
'21': '辽