10572: 【入门/基础】中国身份证号码校验

内存限制:128 MB 时间限制:1.000 S 提交:2 解决:1
评测方式:文本比较 命题人:

题目描述

前情提要

第二届河南省最美教师评选开始了,每一位同学都可以投票选出你支持的人选,但是为了防止刷票,必须通过身份验证才可投票。负责投票平台后台的老大爷希望你能帮他验证身份证号的合法性,防止那些熊孩子随意刷票,下面给出验证规则: (身份证末尾的大写X表示罗马数字10) 

题目描述

a) 将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:$7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2$。
b) 将这17位数字和系数相乘的结果相加。
c) 用加出来和除以11。余数只可能有$0-1-2-3-4-5-6-7-8-9-10$这11个数字。其分别对应的最后一位身份证的号码为$1-0-X-9-8-7-6-5-4-3-2$。

题目要求

现在提供一个身份证号码,请你仅根据最后一位判断是否合法。(不保证省份证真实存在,不保证年月日满足要求,但是只需要判断身份证是否合法,不需要判断年份月份是否现实)

输入

输入格式

第一行:输入18个字符,表示身份证号。保证$X$一定为大写。

输出

输出格式

第一行:如果合法,输出True,否则,输出False

样例输入 复制

53010219200508011X

样例输出 复制

True

提示

数据范围

对于$100\%$的数据,保证符合题目描述中的要求。

时间限制

1000ms

内存限制

128MiB

样例解释

首先我们得出前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。然后用189除余11得出结果$189\%11=2$,也就是说其余数是2。最后通过对应规则就可以知道余数2对应的检验码是$X$。所以,可以判定这是一个正确的身份证号码。