#1155. 中国身份证号码校验

中国身份证号码校验

题目描述

第二届河南省最美教师评选开始了,每一位同学都可以投票选出你支持的人选,但是为了防止刷票,必须通过身份验证才可投票。

负责投票平台后台的老大爷希望你能帮他验证身份证号的合法性,防止那些熊孩子随意刷票,下面给出验证规则: (身份证末尾的大写X表示罗马数字10\red{10}) 采用了ISO 7064:1983.MOD 11-2校验码,以防止不小心记错某一位

  • 1、将前面的身份证号码17\red{17}位数分别乘以不同的系数。

    从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2

  • 2、将这17\red{17}位数字和系数相乘的结果相加。

  • 3、用加出来和除以11\red{11}

  • 4、余数只可能有0-1-2-3-4-5-6-7-8-9-1011\red{11}个数字。

    其分别对应的最后一位身份证的号码为1-0-X-9-8-7-6-5-4-3-2

  • 5、通过上面得知如果余数是3\red{3},就会在身份证的第18\red{18}位数字上出现的是9\red{9}

    如果对应的数字是2\red{2},身份证的最后一位号码就是X\red{X}

特别注意:

\red{Ⅹ}“ 是 罗马数字 10\red{10}, 不是 英文大写字母 ”X\red{X}“, 此处为了编码方便,使用了英文字母 ‘X\red{X}’ 代替;

现在将给你提供一组身份证号码,请判断哪些是合法的,哪些是不合法的。

输入格式

第一行一个整数n\red{n},表示给你提供的身份证号码总数

接下来n\red{n}行每行18\red{18}个字符,为一个身份证序列,保证字符满足为0\red{0}~9\red{9}X\red{X}(末尾的X\red{X}一定为大写)

\red{*}不保证省份证真实存在,不保证年月日满足要求,但是只需要判断身份证是否合法,不需要判断年份月份是否现实)

输出格式

对于每一行输入,给出一个输出,表示输入的身份证是否合法

如果合法,则输出"True",否则,输出"False"

样例

输入样例

1
53010219200508011X

输出样例

True

提示

n<=500\red{n <= 500}

样例解释:\blue{样例解释:}

首先我们得出前17\red{17}位的乘积和

( (5*7)+(3*9)+(0*10)+(1*5)+(0*8)+(2*4)+(1*2)+(9*1)+(2*6)+(0*3)+(0*7)+(5*9)+(0*10)+(8*5)+(0*8)+(1*4)+(1*2) )189\red{189}

然后用189\red{189}除余11\red{11}得出结果189%11==2\red{189\%11 == 2},也就是说其余数是2\red{2}。最后通过对应规则就可以知道余数2\red{2}对应的检验码是X\red{X}

所以,可以判定这是一个正确的身份证号码。