題目29. 身分證驗證器
問題描述:
設計一個程式可以檢查身分證字號的正確性 ( 應檢查性別欄及檢查碼是否正確 ) 。
身分證字號共有十個碼,且有一定的編碼規則,其檢查編碼的規則如下:
其中檢查碼的計算方法如下:
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 整除,則此組身份證號碼是對的,反之則是錯的。
輸入說明:
輸入身分證字號,第一碼為英文大寫。
輸出說明:
若身分證字號正確,印出「CORRECT!!!」;不正確則印出「WRONG!!!」。
範例:
Sample Input | Sample Output |
A123456789 | CORRECT!!! |
L163690274 | WRONG!!! |
C++
- #include <iostream>
- #include <string.h>
- #include <cmath>
- using namespace std;
-
- int main() {
-
- string NUM;
- char char_num[10];
- char A[26] = {'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'};
- int int_num[10];
- while(cin >> NUM)
- {
- strcpy(char_num, NUM.c_str());
- for(int i = 0;i < 10;i++)
- {
- if(i == 0)
- {
- for(int j = 0;j < 26;j++)
-
- {
- if(char_num[0] == A[j])
- {
- int_num[0] = j+10;
- }
- }
- }
- else
- {
- int_num[i] = ((int)char_num[i]-48);
- }
- }
-
- int P = floor(int_num[0]/10) + (9*(int_num[0]%10));
- for(int i = 1;i < 8;i++)
-
- {
- P = P + (9-i)*int_num[i];
- }
- P = P + int_num[8] + int_num[9];
- if(P % 10 == 0)
- {
- cout << "CORRECT!!!" << endl;
- }
- else
- {
- cout << "WRONG!!!" << endl;
- }
- }
- return 0;
- }
JAVA
- import java.io.*;
- public class Main
- {
- public static void main(String args[]) throws Exception
- {
- String getID;
- int a,b;
- BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
-
-
- while (true)
- {
- getID = br.readLine();
-
-
- if (getID.equals("0"))
- {
- return;
- }
- a=0;
- getID =getID.toUpperCase();
-
-
-
- if (getID.charAt(0)=='A') a=10;
-
- else if (getID.charAt(0)=='B') a=11;
- else if (getID.charAt(0)=='C') a=12;
- else if (getID.charAt(0)=='D') a=13;
- else if (getID.charAt(0)=='E') a=14;
- else if (getID.charAt(0)=='F') a=15;
- else if (getID.charAt(0)=='G') a=16;
- else if (getID.charAt(0)=='H') a=17;
- else if (getID.charAt(0)=='I') a=34;
- else if (getID.charAt(0)=='J') a=18;
- else if (getID.charAt(0)=='K') a=19;
- else if (getID.charAt(0)=='L') a=20;
- else if (getID.charAt(0)=='M') a=21;
- else if (getID.charAt(0)=='N') a=22;
- else if (getID.charAt(0)=='O') a=35;
- else if (getID.charAt(0)=='P') a=23;
- else if (getID.charAt(0)=='Q') a=24;
- else if (getID.charAt(0)=='R') a=25;
- else if (getID.charAt(0)=='S') a=26;
- else if (getID.charAt(0)=='T') a=27;
- else if (getID.charAt(0)=='U') a=28;
- else if (getID.charAt(0)=='V') a=29;
- else if (getID.charAt(0)=='W') a=32;
- else if (getID.charAt(0)=='X') a=30;
- else if (getID.charAt(0)=='Y') a=31;
- else if (getID.charAt(0)=='Z') a=33;
-
- a=(a%10)*9+a/10;
-
-
- b=0;
- b=(getID.charAt(1)-'0')*8+
- (getID.charAt(2)-'0')*7+
- (getID.charAt(3)-'0')*6+
- (getID.charAt(4)-'0')*5+
- (getID.charAt(5)-'0')*4+
- (getID.charAt(6)-'0')*3+
- (getID.charAt(7)-'0')*2+
- (getID.charAt(8)-'0')*1;
-
-
- a=a+b;
- a=10-a%10;
- if (a >= 10)a = 0;
- {
- if (getID.charAt(9)-'0'==a)
- {
- System.out.println("CORRECT!!!");
- }
- else
- {
- System.out.println("WRONG!!!");
- }
- }
- }
- }
- }