問題描述:
請勿使用陣列!
設計一個程式可以檢查身分證字號的正確性 ( 應檢查性別欄及檢查碼是否正確 ) 。
身分證字號共有十個碼,且有一定的編碼規則,其檢查編碼的規則如下:
A1 | N1 | N2 | N3 | N4 | N5 | N6 | N7 | N8 | N9 |
檢查碼 |
1 :代表男性 2 :代表女性 |
英文字 母 |
其中檢查碼的計算方法如下:
Step 1: 根據下表查出第一碼的英文字母對應到的兩位數代號。
字母 | A | B | C | D | E | F | G | H | J | K | L | M | N | P | Q | R | S | T | U | V | X | Y | W | Z | I | O |
代號 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 |
Step 2: 令此代號之十位數為 X1 ,個位數為 X2 。例如 Y 的代號 31 ,則 X1=3 ; X2=1 。
Step 3: 運用下面的公式計算之。如果 P 可以被 10 整除,則此組身份證號碼是對的,反之則是錯的。
輸入說明:
輸入身分證字號,第一碼為英文大寫。
輸出說明:
若身分證字號正確,印出「驗證正確」;不正確則反之。
範例:
Sample Input | Sample Output |
A123456789 | CORRECT!!! |
I147945294 | CORRECT!!! |
W193867023 | CORRECT!!! |
L163690274 | WRONG!!! |
- #include<stdio.h>
- #include<stdlib.h>
- int id_num(char ch)
- {
- switch(ch)
- {
- case 'A': return 10 ;break; case 'P': return 23; break;
- case 'B': return 11 ;break; case 'Q': return 24; break;
- case 'C': return 12 ;break; case 'R': return 25; break;
- case 'D': return 13 ;break; case 'S': return 26; break;
- case 'E': return 14 ;break; case 'T': return 27; break;
- case 'F': return 15 ;break; case 'U': return 28; break;
- case 'G': return 16 ;break; case 'V': return 29; break;
- case 'H': return 17 ;break; case 'W': return 32; break;
- case 'I': return 34 ;break; case 'X': return 30; break;
- case 'J': return 18 ;break; case 'Y': return 31; break;
- case 'K': return 19 ;break; case 'Z': return 33; break;
- case 'L': return 20 ;break;
- case 'M': return 21 ;break;
- case 'N': return 22 ;break;
- case 'O': return 35 ;break;
- }
- }
- int main()
- {
- 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};
- char id[11];
- id[10]='\0';
- int i=0,tmp,total=0;
- for(i=0;i<10;i++)
- scanf("%c",&id[i]);
- if(id[0]<='z'&& id[0]>='a') id[0]-=32;
- tmp=id_num(id[0]);
- 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;
- if((10-total%10) ==(id[9]-'0'))
- printf("CORRECT!!!\n");
- else
- printf("WRONG!!!\n");
- system("PAUSE");
- return 0;
- }
Hiç yorum yok:
Yorum Gönder