Python身份证最后一位校验码怎样计算
时间: 2024-06-01 11:06:30 浏览: 207
身份证号码是由17位数字和一位校验码组成,其中校验码采用ISO 7064:1983, MOD 11-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.用余数去查找校验码,具体对应关系如下:
0:1
1:0
2:X
3:9
4:8
5:7
6:6
7:5
8:4
9:3
10:2
因此,如果余数为0,校验码就是1;如果余数为1,校验码就是0;如果余数为2,校验码就是X。
相关问题
python身份证校验码
身份证校验码是用来验证身份证号码是否有效的一位数字。校验码是通过对身份证号码的前17位数字按照一定的算法进行处理得到的。如果身份证号码最后一位与计算出的校验码不一致,那么该身份证就是无效的。
下面是使用Python实现身份证校验码的示例代码:
```python
def validate_id_card(id_card):
# 将身份证号码的前17位转换为整数列表
id_list = [int(x) for x in id_card[:17]]
# 加权因子
weight_factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
# 校验码对应值
check_code_dict = {
0: '1', 1: '0', 2: 'X', 3: '9', 4: '8', 5: '7', 6: '6', 7: '5', 8: '4', 9: '3', 10: '2'
}
# 计算身份证号码前17位与加权因子的乘积之和
sum = 0
for i in range(17):
sum += id_list[i] * weight_factor[i]
# 取模得到校验码对应的值
check_code = check_code_dict[sum % 11]
# 判断身份证号码的校验码是否正确
if check_code == id_card[17]:
return True
else:
return False
# 调用函数进行身份证校验
id_card = '110101199001011234' # 身份证号码
result = validate_id_card(id_card)
print(result) # 输出:True
```
这段代码中,我们定义了一个`validate_id_card`函数,该函数接收一个身份证号码作为参数,并返回一个布尔值,表示该身份证号码是否有效。函数内部首先将身份证号码的前17位转换为整数列表,然后根据加权因子和校验码对应值的规则计算出校验码,最后判断身份证号码的校验码是否与计算出的校验码一致。
用python按照以下要求写一段代码并实现:我国居民身份证由18位组成,最后1位是由前17位数字按照一系列计算得到的校验码。一个身份证的前17位按照一系列计算得到的校验码若与该身份证的最后一位相同(身份证最后一位如果是X,代表阿拉伯数字10)。
当然可以,这是一个简单的Python函数,用于验证给定的18位居民身份证号码是否有效:
```python
def check_id(id_number):
# 验证身份证号长度
if len(id_number) != 18 or not id_number.isdigit():
return False
# 计算校验码部分
weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] # 奇偶校验码对应的权重
sum_val = sum(int(id) * weight for id, weight in zip(id_number[:-1], weights))
# 根据奇偶性计算校验码
checksum = (11 - (sum_val % 11)) % 11
if checksum == 10: # 对于X的情况处理
checksum = 'X'
else:
checksum = str(checksum)
# 检查最后一位与计算出的校验码是否一致
return checksum == id_number[-1]
# 示例
id_to_test = "123456789012345678"
if check_id(id_to_test):
print(f"{id_to_test} 是有效的")
else:
print(f"{id_to_test} 是无效的")
#
阅读全文