---
# System prepended metadata

title: 'a054: 電話客服中心'

---

###### tags: Basic
 - [x] check
# a054: 電話客服中心
:::info
很多銀行及公司設立了電話客服中心來服務他們的客戶。為了加速身分的查核，常常會要求打電話進來的客戶輸入他的身分證號碼。可是電話上只有數字鍵，要輸入身分證號碼的第一個字母有點麻煩，因此有的語音系統會要求來電者輸入後 9 碼，再根據後 9 碼來推算可能的英文字母。

很多人都知道，身分證號碼的最後一碼是「檢查碼」，它是用前 9 碼所推算出來的，其推算的規則如下：

先依照下表將英文字母轉換為 2 位數字，再加上第 2 到第 9 位的 8 位數字一共有 10 位數字。
台北市 A 10   彰化縣 N 22
台中市 B 11   新竹市 O 35
基隆市 C 12   雲林縣 P 23
台南市 D 13   嘉義縣 Q 24
高雄市 E 14   台南縣 R 25
台北縣 F 15   高雄縣 S 26
宜蘭縣 G 16   屏東縣 T 27
桃園縣 H 17   花蓮縣 U 28
嘉義市 I 34   台東縣 V 29
新竹縣 J 18   金門縣 W 32
苗栗縣 K 19   澎湖縣 X 30
台中縣 L 20   陽明山 Y 31
南投縣 M 21   連江縣 Z 33
由左至右，第一位乘 1，第二位乘 9，第三位乘 8，第四位乘 7...，以此類推，最後一位乘 1。
求各位相對數字乘積的總和 s。
求 s 的個位數 m。(檢查碼只有一位數，因此若 c = 10 時，則檢查碼為 0。)
檢查碼 c = 10 - m 。
假設某人的身份證號碼前 9 碼為 F13024567，那麼他的最後一位檢查碼的計算過程如下：

    F       1    3    0    2    4    5    6    7
  1    5    1    3    0    2    4    5    6    7

 ×1   ×9    ×8    ×7   ×6    ×5    ×4    ×3    ×2   ×1

  1 + 45 +  8 + 21 +  0 + 10 + 16 + 15 + 12 +  7 = 135

檢查碼 = 10 - (135 % 10) = 5

根據上面的規則，A12345678、M12345678 和 W12345678 這三個號碼的檢查碼都是 9。因此，如果在電話上所輸入的後 9 碼是 123456789 時，它的第一位英文字母可能是 A，也可能是 M 或 W。




| input     | output    | 
| --------  | --------  | 
| 130245675 |   FS      | 
| 123456789 | AMW       | 





:::


### 1st Ideas of solving a problem(slowly)
>1. Use a array(data type:char) to build a alphabet table.
>


```=c

#include<stdio.h>
#include<string.h>
void cal(int,int);
int main(){
    int input;
    scanf("%d",&input);
        cal(input/10,input%10);//使用自定義函數
}
void cal(int a,int b){
    int temp=0,i;
    char alphabet[27]={"ABCDEFGHIJKLMNOPQRSTUVWXYZ"};//利用兩個陣列建立表格，相呼應位置
    int num[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};
    for(i=1;i<=8;i++){
        temp+=(a%10)*i;
        a=a/10;
    }
    
    
    for(i=0;i<=26;i++){
        int check;//使用到區域變數和全域變數的概念temp每次回圈結束後仍不歸零,而check歸零
        check=0;
        check=((num[i]%10)*9+(num[i]/10)*1)+temp;
        if(((check%10)!=0)&&((10-(check%10))==b)){
            printf("%c",alphabet[i]);
        }
        else if(((temp%10)==0)&&(((10-(temp%10))%10)==b)){
            printf("%c",alphabet[i]);
        }
    }
    printf("\n");

}



```
:::danger
測資148不過
:::