身份證一共18位,前邊17位是地區編碼和出生日期,還有序號,最後一位是校驗位,範圍從0到10,10用羅馬文字x表示,男性爲偶數,女性爲單數。
代碼如下:
- #include <stdio.h>
- //#include <math.h>
- int main(void)
- {
- char idCard[] = "62240019891111123";
- char map[] = "10x98765432";
- int w[17] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};//w[i] = 2^(i-1), (i=18,17,16,.....2);
- int i;
- int sum = 0;
- for (i=0; i<17; i++)
- {
- /*
- The last num is : map[sum(a[i]*w[i])%11]
- a[i] = idCard[i-1], (i=1,2,3,....17)
- w[i] = 2^(i-1), (i=18,17,16,.....2); the w[i] result is : {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}
- */
- sum += (idCard[i]-48) * w[i];//sum += (idCard[i]-48) * ((int)pow(2,(18-i-1))%11);
- }
- printf("The last num: %c/n", map[sum%11]);
- return 0;
- }