黑马程序员技术交流社区

标题: 一个关于身份证的验证-许庭洲 [打印本页]

作者: 赵力    时间: 2012-6-29 20:01
标题: 一个关于身份证的验证-许庭洲
看到许庭洲  在一个帖子中回复关于二代身份证验证的问题 严重表示不理解,求详细解释。。谢谢。
  举个二代身份证是否是真的小例子:某男性的身份证号码是34052419800101001X。我们要看看这个身份证是不是合法的身份证;
首先:将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7. 9 .10 .5. 8. 4. 2. 1. 6. 3. 7. 9. 10. 5. 8. 4. 2. ,可得出,前17位的乘积和是189 ;
然后:用189除以11得出的结果是17 + 2/11,也就是说余数是2;
最后:通过对应规则就可以知道余数2对应的数字是x。所以,这是一个合格的身份证号码。
作者: 吴凡    时间: 2012-6-29 23:58
你这是提问还是自问自答,你也看到了第18位是根据前17位计算出来的,所以如果一个人随便写18位的身份号码百分之90第18位验证码跟前17位函数求出来的不一样,那么这就不是一个合法的身份证(也就是瞎写的,但合法的也未必是真实的,因为你知道这个函数后前17位瞎写后自己计算出18位就合法了)。
作者: 赵力    时间: 2012-7-4 09:44
悟凡 发表于 2012-6-29 23:58
你这是提问还是自问自答,你也看到了第18位是根据前17位计算出来的,所以如果一个人随便写18位的身份号码百 ...

哦 这样子我一直以为这第18位是随机给的 原来是计算出来的,这个从来没听说过 很是纳闷 所以才有此问。
作者: 许庭洲    时间: 2012-7-4 10:00
某男性的身份证号码是34052419800101001X,身份证的最后一位是校验码,从1-10,如果排到10的话,号码就会多一位,因此采用罗马数字X,表示10。
作者: 肖琦    时间: 2012-7-4 11:03

            身份证号码组成介绍:
             身份证是由17位数字和一个 效验码(最后一位)组成
            
             效验码的算法
                效验码=(12-前17位数每位数的数权和%11)%11
            
                数权=此位数的位权*此数
            
                位权=2的序列号此幂%11
            
                身份证的序列号是从左到右是17-1的排序的

       这里涉及到几个词:效验码、数权、位权、序列号,读起来比较绕,多读几遍对比身份证号码看,就好理解点;

       希望对你有帮助.....
作者: 肖琦    时间: 2012-7-4 11:11
顺便科普点身份证的小知识:
   前六位是地区
   中间八位是出生年月日
   后两位是你当天出生的次序(并非绝对)
     第十七位是性别位:单数为男,双数为女
   最后一位是效验码:算出来的效验码如果是等于10就是字母X,否则就是次数
虽然中国人多,这样的算法还是能保证没有重号的{:soso_e113:}
作者: ckz0409    时间: 2012-7-5 09:27
了解!没事还得多多普及一下自己的常识!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2