一、知识点
工作中经常遇到身份证号的校验,下面是整理的内容,有第三方验证姓名和身份证是否是一个人的准确性。
根据《中华人民共和国国家标准GB 11643-1999》中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。顺序码的奇数分给男性,偶数分给女性。校验码是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。
前1、2位数字表示:所在省(直辖市、自治区)的代码;
第3、4位数字表示:所在地级市(自治州)的代码;
第5、6位数字表示:所在区(县、自治县、县级市)的代码;
第7—14位数字表示:出生年、月、日;
第15、16位数字表示:所在地的派出所的代码;
第17位数字表示性别:奇数表示男性,偶数表示女性;
第18位数字是校检码:也有的说是个人信息码,不是随计算机的随机产生,它是 用来检验身份证的正确性。校检码可以是0—9的数字,有时也用x表示。作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么此人的身份证就变成了19位。X是罗马数字的10,用X来代替10,可以保证公民的身份证符合国家标准。
下面介绍算法。
先引入公式:
计算公式令结果为 Y,Y的计算公式为:Y = mod(S, 11)根据下表找出 Y 对应的校验码即为要求身份证号码的校验码C。
注意:Y = mod(S, 11) :除以11求余数
例如:假设某女性居民的
15位身份证号码是320105820927512,32表示江苏省,01表示南京市,05表示鼓楼区,820927表示1982年9月27日。512表示是该地区,其中2表示是女性。那么,升级为18位后的号码为32010519820927512C。下面就根据公式来计算C的值。
Y = mod(S, 11)=MOD(313,11)=5
根据校验值对应表,可知C=7,该人员身份证号码为:
320105198209275127
二、背景
家人出租场地给别人,跟一个开农业公司的老板签的租赁合同。这个老板贼得狠,签订合同的时候故意少写了一位身份证号码,而且家人也没有留他的身份证复印件。现在3个月不给租金了,说疫情期间生意不好,刚开始打电话过去还骂我们,后面就不接电话了。那既然无法协商,就只能通过法律手段了,我们只是希望他把租金结了,赶紧搬走,终止合同。但是去法院起诉需要对方的身份证信息,所以根据身份证校验规则,推断出了大概有4个身份证号码是符合校验规则的,最后试了很多手段,通过12306的身份证核验试出了正确的身份证号。
三、实践
有的时候处理小批量的数据可能execl会方便一些,因为excel也可以做一些简单的计算而无需调试程序。
下面流程的条件是,需要知道对方正确的姓名,性别,身份证号码是漏了1-2位。如果是完全乱写的身份证号码,可能不太适用。
A-R列为疑似的对方的18位身份证
S-AI列位为每一位身份证号码的加权值分别为7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
AJ列为计算余数的公式,公式为 =MOD((A2*S2+B2*T2+C2*U2+D2*V2+E2*W2+F2*X2+G2*Y2+H2*Z2+I2*AA2+J2*AB2+K2*AC2+L2*AD2+M2*AE2+N2*AF2+O2*AG2+P2*AH2+Q2*AI2),11)
AK为固定的数字根据下图,猜测对方的最后一位校验位就是为X,因为很少有人能吧身份证号码中的X写错了。所以对应的余数应该是2。
AL列为是否匹配X的公式,公式为=IF(AJ2=AK2,"ok","nok")
AM列判断身份证倒数第三位的是奇数还是偶数,奇数为男性,偶数为女性。公式为 =IF(MOD(Q2,2)=1,"男","女")
AN列为身份证加权和的结果工位为=A2*S2+B2*T2+C2*U2+D2*V2+E2*W2+F2*X2+G2*Y2+H2*Z2+I2*AA2+J2*AB2+K2*AC2+L2*AD2+M2*AE2+N2*AF2+O2*AG2+P2*AH2+Q2*AI2
其中根据身份证 中年月日的规则,可以推断出疑似的身份证号码大约有50个左右,然后根据推断最后一位是X,再根据EXCEL表格中的公式进行校验,最后AL列是OK的,而且是男性的只有4条记录匹配。最后使用12306添加常用联系人,只有一个号码匹配,确认就是被告人的号码。