大家都知道新身份證號的第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位數字。
如有不妥請指教。
素材來源於網絡。