#2165. 查身份证

查身份证

No testdata at current.

题目描述

一个合法的身份证号码由前 1717 位数字本体码和最后 11 位校验码组成。

校验码的计算规则如下:

先对前 1717 位数字分别乘上对应的权值,再求和。权值从左到右依次为:

7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}

设求得的和为 SS,令:

Z=Smod11Z=S \bmod 11

然后根据下表确定校验码 MM

ZZ 0 1 2 3 4 5 6 7 8 9 10
MM 1 0 X 9 8 7 6 5 4 3 2

现在给定若干个身份证号码,请你检查它们的校验码是否有效,并输出所有有问题的号码。

注意:

  • 这里只检查前 1717 位是否全部为数字,以及最后 11 位校验码是否正确;
  • 不检查前 1717 位所代表的地区、日期等信息是否合法。

如果所有号码都正确,则输出 All passed


输入格式

从标准输入按以下格式读取数据:

NN

11 个身份证号码

22 个身份证号码

\vdots

NN 个身份证号码

其中:

  • 第一行输入一个整数 NN,表示待检查的身份证号码个数。
  • 接下来 NN 行,每行输入一个长度为 1818 的身份证号码。

输出格式

按照输入顺序,逐行输出所有有问题的身份证号码。

如果所有号码都正确,则输出一行:

All passed

样例

4
320124198808240056
12010X198901011234
110108196711301866
37070419881216001X
12010X198901011234
110108196711301866
37070419881216001X
2
320124198808240056
110108196711301862
All passed

样例解释

对于第一组样例:

  • 12010X198901011234 的前 1717 位中包含非数字字符,因此有问题;
  • 11010819671130186637070419881216001X 的校验码不正确,因此也有问题。

对于第二组样例,两个身份证号码都合法,因此输出 All passed


数据范围

  • 1N1001 \le N \le 100
  • 每个身份证号码长度均为 1818