身份證號碼組成
15位身份證號組成:
省份(2位)市(2位)區[縣](2位)年(2位)月(2位)日(2位)+3位序列號 [奇數給男性/偶數給女性]
18位身份證號組成:
省份(2位)市(2位)區[縣](2位)年(4位)月(2位)日(2位)+3位序列號+1位校驗碼 [奇數給男性/偶數給女性]
注意:
1)(身份證號碼第七位到第十四位)表示編碼對象出生的年、月、日,其中年份用四位數字表示,年、月、日之間不用分隔符。
2)(身份證號碼第十五位到十七位)地址碼所標識的區域范圍內,對同年、月、日出生的人員編定的順序號。其中第十七位奇數分給男性,偶數分給女性。
3)(身份證號碼最后一位)是根據前面十七位數字碼,按照ISO 7064:1983.MOD 11-2校驗碼計算出來的檢驗碼。作為尾號的校驗碼,主要是為了校驗計算機輸入公民身份證號碼的前17位數字是否正確,是由號碼編制單位按統一的公式計算出來的,如果某人的尾號是0-9,都不會出現X,但如果尾號是10,那么就得用X來代替,因為如果用10做尾號,那么此人的身份證就變成了19位,而19位的號碼違反了國家標准,並且中國的計算機用用系統也不承認19位的身份證號碼。Ⅹ是羅馬數字的10,用X來代替10,可以保證公民的身份證符合國家標准。
三、校驗碼的計算方法
1、將前面的身份證號碼17位數分別乘以不同的系數。從第一位到第十七位的系數分別為:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
2、將這17位數字和系數相乘的結果相加。
3、用加出來和除以11,看余數是多少?
4、余數只可能有0-1-2-3-4-5-6-7-8-9-10這11個數字。其分別對應的最后一位身份證的號碼為1-0-X -9-8-7-6-5-4-3-2。
5、通過上面得知如果余數是2,身份證的最后一位號碼就是羅馬數字x。如果余數是10,就會在身份證的第18位數字上出現的是2。
例如:某男性的身份證號碼 我們要看看這個身份證是不是合法的身份證。
首先我們得出前17位的乘積和是189,然后用189除以11得出的結果是17+2/11,也就是說其余數是2。最后通過對應規則就可以知道余數2對應的是羅馬數字X。所以,可以判定這是一個合格的身份證號碼。
直接復制就可以使用
private bool XiaoYanMa(string id)
{ //身份證號從第一位到第十七位的系數
int[] QuanZhi = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
//根據余數進行判斷身份證第18位的效驗碼
string XiaoYan = "10X98765432";
//對身份證數進行取值
string number17 = id.Substring(0, 17);
string number18 = id.Substring(17);
int sum = 0;
for (int i = 0; i < 17; i++)
{//將身份證的17位數字和系數相乘的結果相加
sum = sum + Convert.ToInt32(number17[i].ToString()) * QuanZhi[i];
}
//用加出來和除以11,看余數 進行判斷
int mod = sum % 11;
string FanHui = XiaoYan[mod].ToString();//將除於11的余數跟效驗的數下標一一對應
//算出來的數在跟第18位進行比較看是否一致
if (number18.Equals(FanHui, StringComparison.OrdinalIgnoreCase))//忽略大小寫比較方法
{ return true; }
else
{ return false; }
}