博主個人網站:http://www.dzyong.top
微信公衆號:《前端筱園》
今天我們來講一個有意思的話題,我們的身份證是如何防僞的。
在身份證正面印有簽發機關和有效日期。背面則有姓名、性別、民族、出生日期、住址、頭像等信息,而最重要的就是身份證號。
身份證號碼如何定出來的?
身份證號碼在你辦理出生戶口登記時就已經訂好了,共有18位。可以把它們分爲四段。
1-6位是地址碼:根據中國的行政區代碼,每兩位一組,分別代表了你出生地點所在的省市縣級行政區。
7-14位是出生日期碼:代碼表了你出生日期的年月日。
15-17位是順序碼:爲什麼要加入這個順序碼呢,因爲同年同月同日同地出生的人不止一個,因此需要對他們進行一個順序編號,防止重號。第17位用奇數表男性,偶數表女性。
18位:這位是校驗碼,也是最爲重要的一位,他用來校驗你的身份證號碼是否真實準確,它通過1-17位共同計算得出。
如何校驗?
中國大陸採用的是MOD 11-2 校驗系統。身份證號碼的每一位都有一個固定的權重係數,等於2的18-i 次方除以11的餘數(i爲各個號碼的位數)。可以得到每一位的權重分(W)別爲:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
將前17位號碼的數字與其對應的權重相乘後再相加得到數值S(本例結果爲240)。
把得到的S除以11得到餘數Y。
用12減去這個餘數Y後再除以11得到的餘數 J 就是校驗碼的數值,校驗碼的結果取值爲0-10,這裏的10我們會用羅馬數字的10即X表示,這也就是爲什麼生活中看到很多人的身份證號碼最後一位是X的原因了。
由於校驗碼是由前17位的數值通過計算得出的,因此,你如果在錄入時,前面輸錯了任意一位,算出來的校驗碼與實際的無法匹配,那麼這個號碼就不能通過驗證。
是否有漏洞?
這種校驗方式也不是可以進行100%的進行校驗的,如果前面出現了兩位或兩位以上的數字被替換時,那麼是有可能計算出的校驗碼與實際是相同的。
所以如果想驗證身份證號碼是不是你本人,只單憑身份證號號碼的數字進行校驗是遠遠不夠的。還需要身份證卡片本身的校驗。