练习专区
今天的一小步就是明天的一大步
Problem 1830 身份证识别
Accepted: 2
Total Submit: 6
Time Limit: 1000ms
Memory Limit: 30720KB
Description
1.号码的结构
公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
2.地址码
表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。
3.出生日期码
表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。
4.顺序码
表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。
5.校验码
根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。
即:
1-2位:省、自治区、直辖市代码
3-4位:地区市代码
5-6位:区县代码
7-14位:出生年月日,如19800808,
1980年8月8日出生
15-17位:顺序码,其中第17位单数为男、双数为女
18位为校验位,是通过前17位数计算出来的,用0-9或X表示
作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么此人的身份证就变成了19位,而19位的号码违反了国家标准,并且中国的计算机应用系统也不承认19位的身份证号码。Ⅹ是罗马数字的10,用X来代替10,可以保证公民的身份证符合国家标准。
注意:仅考虑大陆地区
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-1-2-3-4-5-6-7-8-9-10这11个数字。其分别对应的最后一位身份证的号码为1-0-X -9-8-7-6-5-4-3-2。
5、通过上面得知如果余数是3,就会在身份证的第18位数字上出现的是9。如果对应的数字是2,身份证的最后一位号码就是罗马数字x。
例如:某男性的身份证号码为【53010219200508011x】,我们看看这个身份证是不是合法的身份证。
首先我们得出前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=17----2,也就是说其余数是2。最后通过对应规则就可以知道余数2对应的检验码是X。所以,可以判定这是一个正确的身份证号码。
附录:行政区代码
(身份证号码前六位)表示编码对象常住户口所在县(市、镇、区)的行政区划代码。
北京市|110000,天津市|120000,河北省|130000,山西省|140000,内蒙古自治区|150000,
辽宁省|210000,吉林省|220000,黑龙江省|230000,
上海市|310000,江苏省|320000,浙江省|330000,安徽省|340000,福建省|350000,江西省|360000,山东省|370000,
河南省|410000,湖北省|420000,湖南省|430000,广东省|440000,广西壮族自治区|450000,海南省|460000,
重庆市|500000,四川省|510000,贵州省|520000,云南省|530000,西藏自治区|540000,
陕西省|610000,甘肃省|620000,青海省|630000,宁夏回族自治区|640000,新疆维吾尔自治区|650000,
台湾省(886)|710000,
香港特别行政区(852)|810000,澳门特别行政区(853)|820000
居民身份证号码校验码----计算方法:
Input
输入有若干行,每行一个字符串。
Output
按样例输出。
Sample Input
Sample Output
Hint