本项目使用C语言编写,在PTA平台上实现了对身份证号码的有效性检验,包括结构分析和校验码验证。
7-5 查验身份证
一个合法的中国居民身份证号码由17位地区、日期编号和顺序编号加上一位校验码组成。该校验码通过以下步骤计算得出:首先,对前17位数字分别乘以特定权重({7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2})进行加权求和;然后,将计算得到的总和对11取模得出值Z。根据Z与校验码M之间的映射关系(如下表所示),可以确定最后一位数字是否正确。
| Z | M |
|---|---|
| 0 | 1 |
| 1 | 0 |
| 2 | X |
| 3 | 9 |
| 4 | 8 |
| 5 | 7 |
| 6 | 6 |
| 7 | 5 |
| 8 | 4 |
| 9 | 3 |
|10 | 2 |
现在,你需要验证给定的一些身份证号码的校验码是否有效,并输出有问题的号码。请注意,在此过程中不需要检验前17位的有效性(即它们是否符合实际地理和时间规则),只需要确保这17位全为数字且最后一位与上述计算方法相符即可。
输入格式:首先给出一个整数N(≤100)表示接下来要验证的身份证号码的数量。随后,按顺序列出每个长度为18个字符的身份证号。
输出格式:按照输入顺序逐一检查并打印所有不符合校验规则的身份证号。如果所有的身份证号都符合要求,则直接输出All passed。
示例:
**样例输入 1**
```
4
320124198808240056
612010X198901011234
108196711301866
37070419881216001X
```
**样例输出 1**
```
612010X198901011234
37070419881216001X
```
---
**样例输入 2**
```
2
320124198808240056
612010819671130186
```
**样例输出 2**
```
All passed
```