用c語言寫出身份證後四位?第二代身份證号碼由18位數字組成,其各位數字的意義是:第一位表示地區:1華北地區,2東北地區,3華東地區,4中南地區,5西南地區,6西北地區,7台灣,8港澳,今天小編就來聊一聊關于用c語言寫出身份證後四位?接下來我們就一起去研究一下吧!
第二代身份證号碼由18位數字組成,其各位數字的意義是:第一位表示地區:1華北地區,2東北地區,3華東地區,4中南地區,5西南地區,6西北地區,7台灣,8港澳。
第一二位合起來表示省或直轄市:11北京市,12天津市,13河北省,14山西省,15内蒙古。21遼甯省,22吉林省,23黑龍江省。31上海市,32江蘇省,33浙江省,34安徽省,35福建省,36江西省,37山東省。41河南省,42湖北省,43湖南省,44廣東省,45廣西省,46海南省。50重慶市,51四川省,52貴州省,53雲南省,54西藏。61陝西省,62甘肅省,63青海省,64甯夏省,65新疆。71台灣。81香港,82澳門。
第三四位表示市,以陝西省為例:01西安市,02銅川市,03寶雞市,04鹹陽市,05渭南市,06延安市,07漢中市,08榆林市,09安康市,10商洛市。
第五六位表示區縣,以銅川市為例:02王益區,03印台區,04耀州區,21耀縣,22宜君縣。
第七至十四位表示出生年、月、日:其中年4位,月2位,日2位。
第十五至十七位表示初次辦身份證時或初次登記戶口時,在所轄派出所登記的順序及性别,其中第十七位也就是倒數第二位為單數(奇數)時代表男,為雙數(偶數)時代表女。
第十八位為校驗碼,其計算方法為:給身份證号碼的第一至十七位數字分别乘以加權系數:7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,即第一位數字乘以7,第二位數字乘以9,第三位數字乘以10……第十六位數字乘以4,第十七位數字乘以2,把所得十七個乘積相加求出總和,再用總和除以11,所得餘數隻能有0,1,2,3,4,5,6,7,8,9,10共十一個,這些餘數對應的校驗碼分别是:1 0 10 9 8 7 6 5 4 3 2 就是第十八位的校驗碼。但是,10是兩位數,如果寫成10身份證号碼就變成19位啦,為了保證所有人的身份證号碼都是十八位,所以對校驗碼是10的就用羅馬數字中表示10的x代表10。
假如某人的身份證号碼為:680213202104244136,可知其是西北某省人,2021年4月24日出生在所轄派出所報戶口的第二個男孩,其校驗碼計算過程如下:6*7 8*9 0*10 2*5 1*8 3*4 2*2 0*1 2*6 1*3 0*7 4*9 2*10 4*5 4*8 1*4 3*2=281,用281除以11得到餘數7,對應的校驗碼是6,在18位号碼中隻要有一位錯誤,校驗碼就對不上。
現把本人用C語言編寫的計算身份證的校驗碼及檢查身份證号碼是否有錯誤的程序展示如下:
//用C語言驗證身份證号碼對錯 #include <stdio.h> /*輸入輸出函數頭文件*/#include <string.h> /*字符串處理函數頭文件*/int main () //主函數 { char hm[18]; //定義18位字符串數組:号碼hm[] printf("請連續輸入18位身份證号碼:");scanf("%s",hm); //讀入身份證号碼hmint dy[11]={1,0,10,9,8,7,6,5,4,3,2,}; //dy為和被11除的餘數共有11個:0,1,2,3 …10對應的11位校驗碼int xs[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; //身份證号碼前17位對應的加權系數xsint i,he=0,ys,jc,jym; //定義循環變量i,及其它變量:和he,餘數ys,檢查jc,校驗碼jymfor(i=0;i<=16;i ) {he = (hm[i]-48)*xs[i];} //求加權和 ys = he; //求和被11除的餘數 printf("計算出的校驗碼是:"); if(ys!=2) printf("%d\n",dy[ys]); else printf("x\n"); //輸出校驗碼(因餘數2對應的校驗碼10是兩位數,故用羅馬數字x表示)if(hm[17] != 'x') jym=hm[17]-48; else jym=10; //處理校驗碼 jc=(ys jym); //檢查:if(jc == 1) printf("身份證号碼輸入正确!"); else printf("身份證号碼輸入有誤!"); }
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!