11 Ocak 2013 Cuma

身分證驗證器


問題描述:
請勿使用陣列!
設計一個程式可以檢查身分證字號的正確性 ( 應檢查性別欄及檢查碼是否正確 ) 。
身分證字號共有十個碼,且有一定的編碼規則,其檢查編碼的規則如下:
A1N1N2N3N4N5N6N7N8N9
檢查碼
1 :代表男性
2 :代表女性
英文字 母
其中檢查碼的計算方法如下:
Step 1: 根據下表查出第一碼的英文字母對應到的兩位數代號。
字母ABCDEFGHJKLMNPQRSTUVXYWZIO
代號1011121314151617181920212223242526272829303132333435
Step 2: 令此代號之十位數為 X1 ,個位數為 X2 。例如 Y 的代號 31 ,則 X1=3 ; X2=1 。
Step 3: 運用下面的公式計算之。如果 P 可以被 10 整除,則此組身份證號碼是對的,反之則是錯的。
CAR34
輸入說明:
輸入身分證字號,第一碼為英文大寫。
輸出說明:
若身分證字號正確,印出「驗證正確」;不正確則反之。
範例:
Sample InputSample Output
A123456789CORRECT!!!
I147945294CORRECT!!!
W193867023CORRECT!!!
L163690274WRONG!!!



  1. #include<stdio.h>  
  2. #include<stdlib.h>  
  3. int id_num(char ch)  
  4. {  
  5.     switch(ch)  
  6.     {  
  7.         case 'A'return 10 ;break;   case 'P'return 23; break;  
  8.         case 'B'return 11 ;break;   case 'Q'return 24; break;  
  9.         case 'C'return 12 ;break;   case 'R'return 25; break;  
  10.         case 'D'return 13 ;break;   case 'S'return 26; break;  
  11.         case 'E'return 14 ;break;   case 'T'return 27; break;  
  12.         case 'F'return 15 ;break;   case 'U'return 28; break;  
  13.         case 'G'return 16 ;break;   case 'V'return 29; break;  
  14.         case 'H'return 17 ;break;   case 'W'return 32; break;  
  15.         case 'I'return 34 ;break;   case 'X'return 30; break;  
  16.         case 'J'return 18 ;break;   case 'Y'return 31; break;  
  17.         case 'K'return 19 ;break;   case 'Z'return 33; break;  
  18.         case 'L'return 20 ;break;     
  19.         case 'M'return 21 ;break;     
  20.         case 'N'return 22 ;break;     
  21.         case 'O'return 35 ;break;  
  22.     }  
  23. }  
  24. int main()  
  25. {  
  26.     int idnum[26]={10,11,12,13,14,15,16,17,34,18,19,20,21,22,35,23,24,25,26,27,28,29,32,30,31,33};  
  27.     char id[11];  
  28.     id[10]='\0';  
  29.     int i=0,tmp,total=0;  
  30.     for(i=0;i<10;i++)  
  31.     scanf("%c",&id[i]);  
  32.     if(id[0]<='z'&& id[0]>='a') id[0]-=32;   
  33.     tmp=id_num(id[0]);  
  34.     total=(tmp%10)*9+tmp/10+(id[1]-'0')*8+(id[2]-'0')*7+(id[3]-'0')*6+(id[4]-'0')*5+(id[5]-'0')*4+(id[6]-'0')*3+(id[7]-'0')*2+(id[8]-'0')*1;  
  35.     if((10-total%10) ==(id[9]-'0'))  
  36.         printf("CORRECT!!!\n");  
  37.     else  
  38.         printf("WRONG!!!\n");     
  39.     system("PAUSE");  
  40.   
  41. return 0;   
  42. }  

Hiç yorum yok:

Yorum Gönder

Binary Conversion

Problem Description Convert two binary numbers into two decimal numbers and compute their sum. Your program has to convert two binary number...