身份证号的计算规则是怎样,如何校验一个身份证号是合法的?
我們要做校驗身份證是否合法,首先要知道身份證號的組成規則,下面我們就來說說這個身份證號:
大家都應該知道我們身份號有兩種,一種是15位數的身份證號 另一種是18位身份證號
15位:6位常住戶口所在縣(市、旗、區)的行政區劃代碼(xxyyzz),6位出生年月日(901212),最后三位稱為順序碼,是對前12位編號相同的人編定的順序號,其中奇數分配給男性,偶數分配給女性。
18位:6位常住戶口所在縣(市、旗、區)的行政區劃代碼(xxyyzz),8位出生年月日(19901212),接下來三位稱為順序碼,是對前14位編號相同的人編定的順序號,其中奇數分配給男性,偶數分配給女性。前面17位身份證編碼統稱為本體碼,是直接由本人的個人信息決定的,而最后一位號碼叫做校驗碼,其是根據校驗公式,由本體碼決定,用來驗證錄入或轉錄過程的準確性。
15位數沒什么好說的,主要是18位最后一位怎么來的,為什么會有X出現?
算法:先對其他17個乘積求和,然后除以11得到余數,再用1或者12減去這個余數即可得到校驗碼
1、將前面的身份證號碼17位數分別乘以不同的系數。從第一位到第十七位的系數分別為:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
2、將這17位數字和系數相乘的結果相加。
3、用加出來和除以11,看余數,也即為進行模運算
4、余數只可能有0-1-2-3-4-5-6-7-8-9-10這11個數字。再用1或者12減去這個余數即可得到校驗碼,其分別對應的最后一位身份證的號碼為1-0-X -9-8-7-6-5-4-3-2。
5、通過上面得知如果余數是3,就會在身份證的第18位數字上出現的是12-3=9。如果對應的數字是10,身份證的最后一位號碼就是羅馬數字X。
舉個例子:
例如:某男性的身份證號碼為【53010219200508011X】, 我們看看這個身份證是不是合法的身份證或者說校驗計算下最后一位校驗碼是否為X?
首先我們得出前17位的乘積和【(5*7)+(3*9)+(0*10)+(1*5)+(0*8)+(2*4)+(1*2)+(9*1)+(2*6)+(0*3)+(0*7)+(5*9)+(0*10)+(8*5)+(0*8)+(1*4)+(1*2)】是189,然后用189除以11得出的結果是189/11=17----2,也就是說其余數是2。最后通過對應規則就可以知道余數2對應的檢驗碼是12-2=10即為X。所以,可以判定這是一個正確的身份證號碼。
另外:好奇心比較強的朋友可能會有疑問,對于算法實現的具體實現的第一步前17位對應系數為什么是7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2,是規定的嘛?其實并不然,本人其實最初了解這個時候也有這樣的疑問,事實上這個系數或者叫加權因子都是一定的計算規則來的,下面給大家也解釋下。
身份證號碼位置i: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
加權因子的公式是:2的18-i次冪除以11取余數,這個值即為加權因子值
第一位:2的(18-1)次冪=131072%11=7
第二位:2的(18-2)次冪=65536%11=9
...
第十七為:2的(18-17)次冪=2%11=2
如此計算即可得到前十七位對應的加權因子數分別為7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2
身份證校驗碼規則你懂了嗎?有了這些計算規則,你想通過程序進行校驗當前身份證號是否合法是不是就沒那么復雜了?
總結
以上是生活随笔為你收集整理的身份证号的计算规则是怎样,如何校验一个身份证号是合法的?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 外显率&显性上位
- 下一篇: 「笔记」极角排序