標籤: 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 ...