Copyright 2019 HisenZhang
2013年开始中国全面使用第二代居民身份证. 目前我国公民身份证号码由18位数字组成: 前6位为地址码
, 第7至14位为出生日期码
, 第15至17位为顺序码
, 第18位为校验码
. 其中第18位校验码
用于快速检测身份证号是否合法(以防止输入错误等情况).
校验过程如下:
- 将身份证号逐位乘以对应的权重, 其中
X
表示数字10
. - 对上一步的结果求和
- 将校验和对
11
取模mod 11
- 如果结果为
1
, 则该身份证号合法.
上述权重规定于中华人民共和国国家标准GB11643-1999.
在这个挑战里, 你需要编写一个程序来检验输入的身份证号是否合法.
这里以身份证号11010519491231002X
为例, 演示上述过程.
1 | 序号 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 |
乘以权重并求和
$$
7\cdot1+9\cdot1+ …+1\cdot10 = 177
$$对
11
取模
$$
177 \mod11 = 1
$$
因为结果为1
, 该身份证号有效.
样例
从标准输入接收一个身份证号码. 如果该输入是有效号码则输出VALID
字样. 否则输出INVALID
.
输入样例 1
1 | 11010519491231002X |
输出样例 1
1 | VALID |
输入样例 2
1 | 330301194912310021 |
输出样例 2
1 | INVALID |
完成度
本挑战的完成度分为两个等级
- 可以求出校验和
- 可以输出样例中的期望结果
目标
- 强化数据类型和类型转换
- 强化列表与字符串的操作
- 强化四则运算的编程
- 强化条件/循环语句
材料
访问OneDrive以获取相关材料
- 中文维基文库:
GB_11643-1999.pdf
提示
- 字符串对象可以视作列表来操作