身份证号码的验证规则如下: 1) 将身份证号码前17位数字分别乘以不同的系数。第1位到第17位的系数分别是: (7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2) 2) 将上述步骤17个结果相加,记为s1; 3) 用s1除以11,看余数是多少; 4) 余数只可能是0,1,2,3,4,5,6,7,8,9,10共11个数字, 依次对应('1','0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'),得到的对应字符就是身份证号码最后一位。 例如:如果余数为2,则身份证号码最后一位就是X 5) 如果上述转换结果和输入的身份证号码最后一位相同,则验证通过,否则验证不通过。 编写一个函数,验证身份证号码,如果通过则返回'pass',否则返回'error' 主程序输入n个身份证号码,对每个身份证号码进行验证。 输入: 第一行输入一个整数n,代表n个身份证号码 依次输入n行,每一行输入一个身份证号码 本题保证输入的n大于0,且每个身份证号码是18位。即无需考虑异常的输入数据。 输出: 输出n行验证结果,每行输出一个元组:(身份证号码,pass或error) 输入样例: 2 370283198611283516 620102200312015338 输出样例: ('370283198611283516', 'pass') ('620102200312015338', 'error'),请帮我写出满分python代码答案
时间: 2024-01-02 07:04:11 浏览: 80
以下是满分Python代码:
```python
def verify_id(id_number):
factors = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
s1 = sum([int(id_number[i]) * factors[i] for i in range(17)])
check_code_list = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
check_code = check_code_list[s1 % 11]
if check_code == id_number[17]:
return 'pass'
else:
return 'error'
n = int(input())
for i in range(n):
id_number = input().strip()
result = verify_id(id_number)
print((id_number, result))
```
其中,`verify_id`函数用于验证身份证号码,输入为一个字符串类型的身份证号码,输出为字符串类型的验证结果,即'pass'或'error'。主程序中,先输入身份证号码的个数n,然后依次输入n个身份证号码,并对每个身份证号码进行验证,最后输出验证结果。
相关问题
python代码写验证身份证号是否为真。 附录: 身份证号码中的校验码是身份证号码的最后一位。公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码,最后一位是数字校验码。 身份证校验码的计算方法如下: 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 2 3 4 5 6 7 8 9 10这11个数字中的一个。这些余数分别对应的最后一位身份证的号码为1 0 X 9 8 7 6 5 4 3 2;
以下是Python代码实现身份证号码校验:
```python
def verify_id_number(id_number):
# 加权因子
weight_factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
# 校验码对应值
check_code = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
# 将身份证号码转换为数组,方便取值
id_number_list = list(id_number)
# 判断身份证号码长度是否为18位
if len(id_number) != 18:
return False
# 前17位数值相乘求和
total = sum([int(id_number_list[i]) * weight_factor[i] for i in range(17)])
# 取余数
remainder = total % 11
# 判断校验码是否正确
if check_code[remainder] != id_number_list[-1]:
return False
return True
```
使用方法:
```python
id_number = 'xxxxxxxxxxxxxxxxx' # 18位身份证号码
is_valid = verify_id_number(id_number)
if is_valid:
print('身份证号码正确')
else:
print('身份证号码错误')
```
注意:身份证号码中的x代表数字,具体的数字需要根据实际情况替换。
身份证校验 python 第十八位
身份证号码的第十八位是校验码,它是由前十七位号码通过一定的算法得出的,用来验证身份证号码的正确性。校验码的计算方法如下:
1. 将身份证号码前十七位数字分别乘以不同的系数,系数从第一位到第十七位依次为:7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2。
2. 将上一步得到的十七个乘积相加得到总和。
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。
因此,如果你已知身份证号码的前十七位数字,就可以通过以上方法计算出校验码。以下是 python 实现身份证号码校验码的代码:
```
def get_check_code(id_number):
# 系数
factors = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
# 校验码对应关系
check_codes = {0: '1', 1: '0', 2: 'X', 3: '9', 4: '8', 5: '7', 6: '6', 7: '5', 8: '4', 9: '3', 10: '2'}
# 前十七位数字
id_number_list = list(id_number)[:17]
# 计算乘积和
product_sum = sum([int(id_number_list[i]) * factors[i] for i in range(17)])
# 取余数
mod = product_sum % 11
# 返回校验码
return check_codes[mod]
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![java](https://img-home.csdnimg.cn/images/20210720083646.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)