生成身份證最後一位校驗位

身份證一共18位,前邊17位是地區編碼和出生日期,還有序號,最後一位是校驗位,範圍從0到10,10用羅馬文字x表示,男性爲偶數,女性爲單數。

代碼如下:

  1. #include <stdio.h>
  2. //#include <math.h>
  3. int main(void)
  4. {
  5.     char idCard[] = "62240019891111123";
  6.     char map[] = "10x98765432";
  7.     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);
  8.     int i;
  9.     int sum = 0;
  10.     for (i=0; i<17; i++)
  11.     {
  12.         /*
  13.         The last num is : map[sum(a[i]*w[i])%11]
  14.         a[i] = idCard[i-1], (i=1,2,3,....17)
  15.         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}
  16.         */
  17.         sum += (idCard[i]-48) * w[i];//sum += (idCard[i]-48) * ((int)pow(2,(18-i-1))%11);
  18.     }
  19.     printf("The last num: %c/n", map[sum%11]);
  20.     return 0;
  21. }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章