身份证号校验位算法

大家都知道新身份证号的第18位是校验位,很多游戏玩家感觉有点小烦。因为游戏一般有防沉迷系统,要求输入身份证号,但很大一部分游戏玩家不想输入自己的真实信息,只想偶尔玩玩,随便输入一个又不对,所以,我给大家介绍下关于身份证号的校验位算法。

大家百度一下一般都知道身份证号的第18位和算法,以下是百度原文(某一个结果)

身份证第18位(校验码)如何计算
创建于2018-04-05 22:33
大家可能很少会计算身份证第18位的校验码的吧?就让大家了解了解以备不时之需吧!
方法
1
1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。然后将这17位数字和系数相乘的结果相加

2
用加出来的和除以11,看余数是多少,余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字。其分别对应的最后一位身份证的号码为1-0-X -9-8-7-6-5-4-3-2。

3
通过上面得知如果余数是3,就会在身份证的第18位数字上出现的是9。如果对应的数字是10,身份证的最后一位号码就是罗马数字x。大概的方法就是这样了。
百度身份证号校验位算法

其他的结果也大同小异。但那17个系数是怎么算出来的呢?估计一般都很难找到答案了。其实那17个数字也是算出来的,不是随机选择的。后面的结果是一个总和对11取余数再做相应的移位操作。而那17个系数也有类似操作。具体的算法是第一位是6的三次方对11取余数,6^3=216=11*19+7,即第一位校验位为7,第2位是6的4次方对11取余数,结果为9,以后每一位都是6的方次加1再对11取余的结果。当然,你不用把每一个方次算出来再取余数,可以边算边取余数。(简单证明如下:任何两个正数a和b,不防设a和b对11的余数为m和n,即存在整数x和y,使得a=11x+m,b=11y+n,ab=(11x+m)(11y+n)=121xy+11xn+11ym+mn=11(11xy+ym+xn)+mn,易知(a*b)%11=(m*n)%11)。比如:(6^3)%11=(((6^2)%11)*6)%11=((36%11)*6)%11=18%11=7。即知道第一个系数是7。第2个系数则直接用(7*6)%11=9,第三个系数为(9*6)%11=10,……,便可轻松得到17个系数,基本都是100以内的乘法和除法。最后有一个移位操作,把身份证号各位数乘以各位系数的总和再对11取余,余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字。其分别对应的最后一位身份证的号码为1-0-X -9-8-7-6-5-4-3-2。这个对应关系也别做个啥子表一样的,还得查表,你把后面那个结果(1-0-X -9-8-7-6-5-4-3-2)换个写法:12-11-10-9-8-7-6-5-4-3-2,就知道对应关系了,就一个简单的减法,把之前得到的余数,用12去减就好了,再对11取余数。比如身份证号前17位全是1(当然不可能有这样的身份证号,只是为了方便算而设的例子),那身份证号各位与各位系数乘积的和为7+9+10+5+8+4+2+1+6+3+7+9+10+5+8+4+2=98,取余数后得10,用12去减得2,即为第18位数字。

如有不妥请指教。

素材来源于网络。

原文地址:https://www.cnblogs.com/wendcn/p/10789258.html