- /* a020: 身分證檢驗 */
- #include <iostream>
- #include <cstdlib>
- using namespace std;
- int main(void){
- string id; // 取得使用者輸入字串
- int code[10]; //存放加權後各組數字
- int total; // 存放加權數字總合
- int user; // 將字母轉換成地區代碼
- int num; // 存放驗證碼
- int check[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};
- while (cin >> id){
- total = 0;//將 total 初始化
- num = 0;//將 num 初始化
- if (id[0] >= 65 && id[0] <= 90){ //大寫
- user = id[0]-65; //取得陣列位置
- }else if(id[0] >= 97 && id[0] <= 122){ //小寫
- user = id[0]-97; //取得陣列位置
- }
- /*開始求權數(字母部分)*/
- code[0] = check[user] / 10 * 1;
- code[1] = check[user] % 10 * 9;
-
- /* 開始求權數(整數部份) */
- /*code[2] = (id[1]-48) * 8;
- code[3] = (id[2]-48) * 7;
- code[4] = (id[3]-48) * 6;
- code[5] = (id[4]-48) * 5;
- code[6] = (id[5]-48) * 4;
- code[7] = (id[6]-48) * 3;
- code[8] = (id[7]-48) * 2;
- code[9] = (id[8]-48) * 1;*/
- for (int i = 1; i <=8; i++){
- code[i+1] = (id[i]-48) * (9-i);
- }
- /* 將權數相加存入 total */
- for (int i = 0; i < 10; i++){
- total += code[i];
- }
-
- /*檢查流水號是否等於驗證碼*/
- num = 10 - (total % 10);
-
- if (num == (id[9]-48)){
- cout << "real" << endl;
- }else{
- cout << "fake" << endl;
- }
-
- }
- //system("pause");
- return 0;
- }
複製代碼 |