输入第一行给出正整数N(≤100)是输入身份证号码的个数,随后N行,每行给出1个18位身份证号码。按照输入的顺序每行输出一个有问题的身份证号码。如果所有号码都正常,则输出All passed
时间: 2024-06-09 15:10:38 浏览: 186
以下是Python3代码实现:
```python
N = int(input())
for i in range(N):
ID = input()
# 检查身份证号码是否为18位
if len(ID) != 18:
print(ID)
continue
# 检查身份证号码前17位是否为数字
if not ID[:17].isdigit():
print(ID)
continue
# 检查身份证号码最后一位是否为数字或X
if not (ID[-1].isdigit() or ID[-1] == 'X'):
print(ID)
continue
# 检查身份证号码是否合法
Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
Xi = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
s = sum([int(ID[i]) * Wi[i] for i in range(17)]) % 11
if ID[-1] != Xi[s]:
print(ID)
continue
print("All passed")
```
我们首先输入身份证号码个数N,然后使用for循环依次读入N个身份证号码。对于每个身份证号码,我们先检查其长度是否为18位,如果不是则直接输出该号码并跳过后续检查。接着我们检查身份证号码前17位是否为数字,如果不是则同样直接输出该号码并跳过后续检查。然后我们检查身份证号码最后一位是否为数字或X,如果不是同样直接输出该号码并跳过后续检查。最后我们检查身份证号码是否合法,这里我们使用身份证号码中的前17位与权重向量Wi相乘并求和得到一个数s,然后将该数对11取模得到一个下标,用下标在列表Xi中查找对应的字符,如果该字符与身份证号码最后一位不同则输出该号码。如果所有号码都正常,则输出"All passed"。
阅读全文