2018/12/15

a020: 身分證檢驗

a020: 身分證檢驗


#include

/*
      A=10 台北市     J=18 新竹縣     S=26 高雄縣
      B=11 台中市     K=19 苗栗縣     T=27 屏東縣
      C=12 基隆市     L=20 台中縣     U=28 花蓮縣
      D=13 台南市     M=21 南投縣     V=29 台東縣
      E=14 高雄市     N=22 彰化縣     W=32 金門縣
      F=15 台北縣     O=35 新竹市     X=30 澎湖縣
      G=16 宜蘭縣     P=23 雲林縣     Y=31 陽明山
      H=17 桃園縣     Q=24 嘉義縣     Z=33 連江縣
      I=34 嘉義市     R=25 台南縣
*/
int map[] = { // 英文字轉成上述數字後,個位數*9+十位數
  1, // A
  10,// B
  19,// C
  28,// D
  37,// E
  46,// F
  55,// G
  64,// H
  39,// I
  73,// J
  82,// K
  2, // L
  11,// M
  20,// N
  48,// O
  29,// P
  38,// Q
  47,// R
  56,// S
  65,// T
  74,// U
  83,// V
  21,// W
  3, // X
  12,// Y
  30,// Z
};

int isValid(char* d) {
  int cs = map[d[0]-'A'];
  for (int i=1; i<9 i="" p="">    cs += (d[i] - '0') * (9-i);
  }
  cs += (d[9] - '0');
  return cs%10 == 0;
}

int main ()
{
  char id[20];
  while (scanf("%s", id) == 1) {
    printf ("%s\n", isValid(id)?"real":"fake");
  }
  return 0;
}

0 意見: