身份证号码

提交数: 300, 通过率: 48.67%, 平均分: 66.73

题目描述:

十八位居民身份证号码由 6 位地址码、8 位出生日期码、3 位顺序码和 1 位校验码组成(倒数第 2 位是性别代码,男单女双),其格式如图所示。

1644118823476158398.png
其中校验码的计算方法如下:
(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

来源: 原创