身份證校驗碼

2021-09-27 03:42:57 字數 1596 閱讀 9463

身份證號碼中的校驗碼是身份證號碼的最後一位,是根據gb 11643-1999中有關公民身份號碼的規定,根據精密的計算公式計算出來的。
公民身份號碼是特徵組合碼,由十七位數字本體碼和一位數字校驗碼組成的十八位號碼。
表示編碼物件常住戶口所在縣(市、旗、區)的行政區劃**,按gb/t2260的規定執行。

表示編碼物件出生的年、月、日,按gb/t7408的規定執行,年、月、日**之間不用分隔符。

表示在同一位址碼所標識的區域範圍內,對同年、同月、同日出生的人編定的順序號,順序碼的奇數分配給男性,偶數分配給女性。

根據前面十七位數字碼,按照iso 7064:1983.mod 11-2校驗碼計算出來的檢驗碼。

將前面的身份證號碼17位數分別乘以不同的係數。從第一位到第十七位的係數分別為:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。

將這17位數字和係數相乘的結果相加。

用加出來和除以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,就會在身份證的第18位數字上出現的是9。如果對應的數字是2,身份證的最後一位號碼就是羅馬數字x。

例如:某男性的身份證號碼為【53010219200508011x】, 我們看看這個身份證是不是合法的身份證。

首先我們得出前17位的乘積和【(57)+(39)+(010)+(15)+(08)+(24)+(12)+(91)+(26)+(03)+(07)+(59)+(010)+(85)+(08)+(14)+(1*2)】是189,然後用189除以11得出的結果是189/11=17----2,也就是說其餘數是2。最後通過對應規則就可以知道餘數2對應的檢驗碼是x。所以,可以判定這是乙個正確的身份證號碼。

<?php

var_dump

(checkidcard

('身份證號'))

;/**

* 驗證身份證號碼

* @param $idcard

*/function

checkidcard

($idcard

)$idcard

=strtoupper

($idcard);

//轉大寫,處理小寫x的情況

$co=[7

,9,10

,5,8

,4,2

,1,6

,3,7

,9,10

,5,8

,4,2

];//係數

$cc=[1

,0,'x',9

,8,7

,6,5

,4,3

,2];

//校驗位

$sum=0

;for($i

=0;$i

<17;

$i++

)$checkcode

=$sum%11

;if($idcard[17

]==$cc[

$checkcode])

else

}?>

身份證校驗碼計算

最近看乙份文件看到身份證規則,覺得很有趣,這裡記錄一下如何計算校驗碼 中華人民共和國國家標準gb 11643 1999 中有關公民身份號碼的規定,公民身份號碼是特徵組合碼,由十七位數字本體碼和一位數字校驗碼組成。排列順序從左至右依次為 簡單舉例 現在去翻了國標文件 gb t 2260 翻到四川省廣元...

身份證校驗

int isright string card cout 9 wi sum 11 if p 17 x p 17 x 最後一位為 x 或 x else if id wi p 17 判斷計算出的身份證校驗碼與輸入是否相符 return error 判斷身份證號碼中的年月日是否正確 bool birthd...

身份證校驗

const regexutils else 手機號碼格式驗證 checkmobile mobile string boolean return regex.test mobile.trim else 郵箱格式驗證 checkemail email string boolean result rege...