问题 E: 校验身份证号码

问题 E: 校验身份证号码

时间限制: 1 Sec  内存限制: 256 MB
提交: 39  解决: 16
[提交][状态][讨论版][命题人:]

题目描述

给出一个身份证号码,判断该身份证号码是否有效。判断规则如下:

1、身份证号码只有15位和18位,没有其它位数的身份证号码。

2、对于18位的身份证号码,最后一位是检验码。只校验检验码是否正确(前面的17位数字默认都符合实际要求)。校验生成步骤如下:

步骤1:将前面身份证号码17位数分别乘以不同的系数。从第1位到第17位的系数分别为7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2。

步骤2:将这17位数字和系数相乘的结果相加。

步骤3:用加出来和除以11;得到一个余数

步骤4:这个余数只可能是0-10之间的11个数字,这个0-10共11个数子分别对应'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'这个11个字符,如果对应错误,则校验失败,否则校验成功。

举例:例如:370722196303074013这个身份证,前面17位数字乘以系数之和=3*7+7*9+0*10+7*5+2*8+2*4+1*2+9*1+6*6+3*3+0*7+3*9+0*10+7*5+4*8+0*4+1*2=295295除以11余9,则9对应的数字应该为3,说明检验成功。则370722196303074014,因为最后一位是4不是3,则说明校验失败。

3、15位的身份证号码,没有检验位。因为15位的身份证号码都是1980年以前发放的身份证号码,而且出生日期都是在1900-1980年之间的身份证。对于15位的身份证号码,需要在第6位后边插入19,插入之后身份证号码变成17位,然后根据第2步中步骤1-步骤4计算出最后一位校验位。最后输出这个15位变成18位后的身份证号码。

 



输入

输入一个身份证号码

输出

1、如果身份证号码既不是15位也不是18位,则输出"Invalid ID number"

2、如果身份证号码是18位,则只需判断检验位是否正确。如果正确则输出"valid ID number",否则输出"Invalid ID number"

3、如果身份证号码是15位,则输出转换后的18位身份证号码。


样例输入

样例1:
370722196303074013
样例2:
370722630307401
样例3:
37072263030740

样例输出

样例1:
valid ID number
样例2:
370722196303074013
样例3:
Invalid ID number

提示


注意:输入的身份证号码长度<=100,而且输入数据保证身份证号码的其它信息都是正确的,如果出生年月日等。只需按照号码长度和检验位是否正确进行判断






身份证号码只包含数字字符和'X'




[提交][状态]