#P05027. 核对身份证校验码

核对身份证校验码

题目背景

居民身份证号码,正确、正式的称谓应该是“公民身份号码”。中华人民共和国居民身份证是国家法定的证明公民个人身份的有效证件。公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,如果某人的尾号是0~9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么此人的身份证就变成了19位,而19位的号码违反了国家标准,并且中国的计算机应用系统也不承认19位的身份证号码。X是罗马数字的10,用X来代替10,可以保证公民的身份证符合国家标准。

校验码计算方法如下:

  1. 将身份证号码的前17位数分别乘以不同的系数。从第1位到第17位的系数依次为:7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2;
  2. 将这17位数字和系数相乘的结果相加。用加起来的和除以11,看余数是多少?
  3. 余数只可能有0、1、2、3、4、5、6、7、8、9、10这11个数字。其分别对应的最后一位身份证的号码为1、0、X 、9、8、7、6、5、4、3、2(即余数0对应1,余数1对应0,余数2对应X...),这就是身份证的校验码。

题目描述

给定若干身份证号码,其中有些身份证号码的校验码可能是错误的,找出并统计校验码错误的身份证号码的数量。

输入格式

若干行,每行都是一个18位的身份证号码,X均为大写。

输出格式

第一行是一个整数NN,就是校验码错误的身份证号码的数量。

然后有NN行,每行是一个校验码错误的身份证号码。这些校验码错误的身份证号码按照输入时的相对顺序依次输出。

输入输出样例

注意:下面输入输出样例中的身份证号码都是虚拟号码。

287282198102141278
179032202004062403
209197196206250302
261123197310303169
49968319720225328X
202508196603228245
487370198302201287
207952198905280824
184183200805252932
384894195803045196
2
261123197310303169
184183200805252932

说明/提示

👀️ 对于100%100\%的数据,输入不超过 100100 行。