最近看乙份文件看到身份證規則,覺得很有趣,這裡記錄一下如何計算校驗碼
《中華人民共和國國家標準gb 11643-1999》中有關公民身份號碼的規定,公民身份號碼是特徵組合碼,由十七位數字本體碼和一位數字校驗碼組成。
排列順序從左至右依次為:
簡單舉例:
現在去翻了國標文件: gb/t 2260
翻到四川省廣元市市中區 的地區碼為510802
我們就可以人為製造乙個身份證號碼: 51080219900603052_ 這個身份證號碼
表示 四川省廣元市市中區 2023年6月3日出生的 第26位女生 。
問題來了 那麼上訴人為編造的 身份證號碼最後一位校驗碼是多少了呢? 這裡得去翻國標 gb 11643-1999
校驗碼計算公式:
現在把上訴校驗碼計算公式翻譯為js的**,
1 首先將身份證前17位進行加權求和。加權值位表一中的值
2 對加權求和結果對11取餘數
3 對餘數數值按照表2進行對映。
得到以下**
function
getcheckcode
(originalidarray)
return checkcodemap.
get(sum %11)
;}const originalid =
'51080219900603052'
;const originalidarray = originalid.
split(''
);const checkcode =
getcheckcode
(originalidarray)
const
id= originalid + checkcode;
console.
log(id)
;// 510802199006030524
算出來最後一位身份證校驗碼號碼為 身份證校驗碼
身份證號碼中的校驗碼是身份證號碼的最後一位,是根據gb 11643 1999中有關公民身份號碼的規定,根據精密的計算公式計算出來的。公民身份號碼是特徵組合碼,由十七位數字本體碼和一位數字校驗碼組成的十八位號碼。表示編碼物件常住戶口所在縣 市 旗 區 的行政區劃 按gb t2260的規定執行。表示編碼...
身份證第18位 校驗碼 的計算方法
身份證第18位 校驗碼 的計算方法 a.將前面的身份證號碼17位數分別乘以不同的係數。從第一位到第十七位的 係數分別為 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 b.將這17位數字和系統相乘的結果相加。c.用加出來和除以11,看餘數是多少?d.餘數只可能有 0 1 2 ...
身份證校驗
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...