生成身份证最后一位校验位

身份证一共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. }

你可能感兴趣的:(生成身份证最后一位校验位)