身份证号码
提交数: 300, 通过率: 48.67%, 平均分: 66.73
题目描述:
十八位居民身份证号码由 6 位地址码、8 位出生日期码、3 位顺序码和 1 位校验码组成(倒数第 2 位是性别代码,男单女双),其格式如图所示。
其中校验码的计算方法如下:
(1)将身份证号码的前 17 位数字分别乘以对应的系数,对应关系如下表。
号码位 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
系数 |
7 |
9 |
10 |
5 |
8 |
4 |
2 |
1 |
6 |
3 |
7 |
9 |
10 |
5 |
8 |
4 |
2 |
(2)将 17 位数字和系数相乘的结果累计求和;
(3)用所求的和除以 11 得到余数;
(4)用余数与身份证号码的最后一位校验码进行对应,对应关系如下表。
模 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
校验码 | 1 | 0 | X | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
现用 C++编程验证身份证号码的正确性,并识别其中所包含的出生日期和性别信息。
输入格式:
一行,18位数字的身份证号。
输出格式:
如果验证成功,输出出生日期,及性别(male, female )。
如果验证失败,输出“wrong!”。
样例输入:
样例1: 330326199807071166 样例2: 330326199807071616
样例输出:
样例1: 1998-07-07,female 样例2: wrong!时间限制: 1000ms
空间限制: 256MB
来源: 原创