身份证号码校验算法(附Python代码)
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1、数字含义 中国大陆第二代身份证号码由18位数据或字母组成,每位数据都有特定的含义,结果如下: 每组数字都有不同的含义: 1) 第1至2位数字代表所在省(直辖市、自治区)的代码; 2) 第3至4位数字代表所在地级市(自治州)的代码; 3) 第5至6位数字代表所在区(县、自治县、县级市)的代码; 4) 第7-14位数字代表出生年、月、日; 5) 第15-16位数字代表所在的派出所代码; 6) 第17位数字表示性别,奇数表示男性,偶数表示女性; 7) 第18位是校验码,及个人信息码,由前17位数字计算得到。 也就是说身份证号码不是随便产生的,它是用来检验身份的正确性。在没有全国个人身份证信息库时。可以通过检验码来校验身份证的正确性。校验码由0-9的数据和字母X组成,其实X表示10(这并不是英文字母X,而是希腊数字10的缩写)。是由号码编制单位按统一的计算公式计算出来的,校验身份证号码正确性也是通过这个公式实现。 2、算法介绍 首先,对前17位信息数字按照特定的方式加权,公式如下: 即各位置的数字和权重的乘积之和,权重计算公式说明:例如位置18(即第一位数字)的权重应该是2的17次方的结果对11取余。 计算出S后再用S对11取余,根据余数确定校验位数字,对照表如下: 比如例子中的身份证号计算出来的S为189