身份证的事情,都与我们息息相关。身份证是身份证明。无论是坐船、火车、飞机,还是外出办事,都离不开这个“宝贝”。我们都知道身份证由18位数字组成(或者说最后一位是X),那么如何设置每一位数字呢?身份证号码组成下表给出了数字的由来。第一个是前六位,是地址码,是居住地对应的号码,如下图,110105是北京市朝阳区的号码;中间八位是出生日期代码,对应年月日。那么第十五位和第十六位是序号,具体是指同一地址标识的区域内同年同一天出生的人(即前十四位完全相同)编制的序号代码;倒数第二位是性别代码,如果男性为奇数,女性为偶数;最后一位为校验码,是根据校验规则得到的数字。如果根据校验规则为十,则用X代替。验证规则验证码(身份证最后一位)是根据前17位代码和ISO7064:1983.MOD11-2验证码计算得到的验证码。具体计算方法如下:将前一个身份证号的17位数字乘以不同的系数。从第一到第十七的系数是:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。将这些17位数字与系数相乘的结果相加。用加法除以11看余数是多少?余数只能有0-1-2-3-4-5-6-7-8-9-10这11个数。对应的最后一个ID号是1-0-X-9-8-7-6-5-4-3-2。(即余数0对应1,余数1对应0,余数2对应X……)根据校验规则,我们可以通过Python实现一个简单的身份证校验功能。defid2code(s):coe={0:7,1:9,2:10,3:5,4:8,5:4,6:2,7:1,8:6,9:3,10:7,11:9,12:10,13:5,14:8,15:4,16:2}sum_num=0l=[]foriins[:17]:l.append(int(i))foriinrange(17):sum_num=sum_num+coe[i]*l[i]returnsum_num%11构造一个coe系数字典,计算余数,然后根据映射关系得到第18位。最后与输入的身份证号最后一位进行比较,进行简单判断。安全问题基于这些认识,我们会发现要得到一个人的身份证号码是相当容易的,尤其是与你有一些联系的人。他们知道您的帐户所在位置,知道您的生日,这些甚至是您社交网络中的公开信息。这样,他们就掌握了你身份证前十四位的准确信息。根据你的性别,你还可以判断第17位的奇偶性,而由于第18位只是校验位,你只需要猜出2.5位的信息即可。总共只有10105=500种可能。这个计算对于计算机来说是小菜一碟,暴力枚举就能破解。身份证号的曝光还可能带来诸多风险,对个人造成不好的影响。
