7-14 查验身份证pta
时间: 2025-04-16 19:06:17 浏览: 28
### PTA 身份证查验 7-14 题解
对于身份证查验问题,主要任务是对给定的一系列18位身份证号进行验证。具体来说:
#### 输入处理
程序首先读入一个正整数 \( N \),表示待检测的身份证数量。接着,在接下来的 \( N \) 行中分别输入每一个身份证号码。
#### 数据校验逻辑
为了判断一个身份证的有效性,需执行两步检查:
1. **前17位字符合法性**:确认这些位置上的字符均为阿拉伯数字。
2. **第18位校验码准确性**:依据特定算法计算得出理论上的校验码,并将其与实际提供的最后一个字符对比。
针对第二项中的校验过程如下所示[^3]:
- 对于前17位数字部分应用加权求和操作;
- 使用固定的权重序列 `{7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}` 进行乘法运算并累加以获得总分;
- 将上述所得分数除以11取余作为索引查找对应的校验符表 `{'0': '1', '1': '0', '2': 'X', '3': '9', '4': '8', '5': '7', '6': '6', '7': '5', '8': '4', '9': '3', '10': '2'}` 中的目标值。
一旦发现任一证件不符合条件即刻记录下来准备输出;反之当全部通过测试则统一返回提示信息"All passed"。
以下是实现此功能的一个Python版本代码片段:
```python
def validate_id_numbers(id_list):
weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
check_codes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
invalid_ids = []
for id_num in id_list:
try:
sum_of_products = sum(int(digit)*weight for digit, weight in zip(id_num[:-1], weights))
expected_check_code = check_codes[sum_of_products % 11]
if not (id_num[-1].upper() == expected_check_code and all(c.isdigit() for c in id_num[:17])):
raise ValueError()
except Exception as e:
invalid_ids.append(id_num)
return "All passed" if not invalid_ids else "\n".join(invalid_ids)
if __name__ == "__main__":
n = int(input().strip())
ids = [input().strip() for _ in range(n)]
result = validate_id_numbers(ids)
print(result)
```
阅读全文
相关推荐
















