Advertisement

身份校验:is_id_number;分数:10分

阅读量:

代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB

题目描述

据我所知,在我的观察范围内

身份证号码并非毫无规律可循

同一城镇内的同学普遍拥有相同的开头六位数字

随后的八位数字则清晰地记录着出生日期

剩下的四位数字则更像是一个序列号

难道不是说 在原有的身份证号码基础上稍微改动几个数字就能冒充他人?

且慢! 有些同学发现他们的身份证号码末尾并非是‘1’至‘9’中的一个数字

这显然不是件简单易行的事情

任务:编写函数验证身份号码是否有效。

根据GB11643-1999《公民身份号码》国家标准,需求如下:

复制代码
    公民身份号码由十七位数字本体码(master number)和一位数字校验码(check number)组成。
    从左到右依次为:六位地址码、八位日期码、三位顺序码、一位校验码。
    地址码:略(本题无需检查)
    日期码:应为有效的日期(考虑闰年)
    顺序码:同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号。奇数分配给男性、偶数分配给女性。
    校验码:对本体码的17位数字、分别乘以权值[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]并累加。
    补充:权值可以用数组保存,用循环处理。不要写17个变

全部评论 (0)

还没有任何评论哟~