18位號碼身份證校驗碼的計算公式(c

2021-07-27 23:45:32 字數 1984 閱讀 4340

標籤: c++

systemc

2009-09-11 23:07

1900人閱讀收藏 

舉報

c++(12)

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

(1)十七位數字本體碼加權求和公式

s = ai * wi, i = 2, ... , 18

y = mod(s, 11)

i: 表示號碼字元從右至左包括校驗碼字元在內的位置序號

ai:表示第i位置上的身份證號碼字元值

wi:表示第i位置上的加權因子

i:      18    17    16     15    14    13    12    11    10    9     8     7     6     5    4    3    2    1

wi:    7      9     10      5      8      4      2      1      6     3     7     9    10    5    8    4    2    1

(2)y值對應的校驗碼字元值:

y:            0    1    2    3    4    5    6    7    8    9    10

校驗碼: 1     0    x    9    8    7    6    5    4    3     2

試算乙個:身份證號是14010519590215222a1

i:      18    17    16     15    14    13    12    11    10    9     8     7     6     5    4    3    2    1

ai:     1      4      0       1       0     5       1     9      5     9     0     2     1     5    2    2    2    a1

wi:    7      9     10      5      8      4      2      1      6     3     7     9    10    5    8    4    2    1

根據公式 s = ai * wi=7+36+0+5+0+20+2+9+30+27+0+18+10+25+16+8+4=217

217/11=19+8/11

y = mod(s, 11)=mod(217,11)=8

所以,檢驗碼為4,該人的身份證號為140105195902152224

程式c++

#include

using namespace std;

const int factor = ;//加權因子 

const int checktable = ;//校驗值對應表 

int checkidinput( char );

void checkid( int, char );

int main()

for ( int i = 0; i < 18; i ++ )//相當於型別轉換

idnumber[ i ] = id[ i ] - 48; 

checkid( idnumber, id );

system( "pause" ); 

return 0;

}int checkidinput( char id )//檢驗身份證是否為18位 

void checkid( int idnumber, char id )

身份證校驗碼計算

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

身份證校驗碼

身份證號碼中的校驗碼是身份證號碼的最後一位,是根據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 ...