身份證號碼驗證演算法參考?

居民身份證的號碼是按照國家的標準編制的,由18位組成:前六位為行政區劃程式碼,第七至第十四位為出生日期碼,第15至17位為順序碼,第18位為校驗碼。作為尾號的校驗碼,是由號碼編制單位按統一的公式計算出來的,如果某人的尾號是0-9,都不會出現X,但如果尾號是10,那麼就得用X來代替,因為如果用10做尾號,那麼此人的身份證就變成了19位,而19位的號碼違反了國家標準,並且我國的計算機應用系統也不承認19位的身份證號碼。Ⅹ是羅馬數字的10,用X來代替10,可以保證公民的身份證符合國家標準。但是我國的居民身份證在升位後,一些人的尾號變成了X。

根據〖中華人民共和國國家標準 GB 11643-1999〗中有關公民身份號碼的規定,公民身份號碼是特徵組合碼,由十七位數字本體碼和一位數字校驗碼組成。排列順序從左至右依次為:六位數字地址碼,八位數字出生日期碼,三位數字順序碼和一位數字校驗碼。地址碼錶示編碼物件常住戶口所在縣(市、旗、區)的行政區劃程式碼。生日期碼錶示編碼物件出生的年、月、日,其中年份用四位數字表示,年、月、日之間不用分隔符。順序碼錶示同一地址碼所標識的區域範圍內,對同年、月、日出生的人員編定的順序號。順序碼的奇數分給男性,偶數分給女性。校驗碼是根據前面十七位數字碼,按照ISO 7064:1983.MOD 11-2校驗碼計算出來的檢驗碼

將前面的身份證號碼17位數分別乘以不同的係數。第i位對應的數為[2^(18-i)]mod11。從第一位到第十七位的係數分別為: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;

相關問題答案