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

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

    1. 先依照下表將英文字母轉換為 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
    2. 由左至右,第一位乘 1,第二位乘 9,第三位乘 8,第四位乘 7...,以此類推,最後一位乘 1。
      求各位相對數字乘積的總和 s。
    3. 求 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。

1
2
3
4
5
6
7
8
9
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
# 每個行政區域的編號對應的數字,第一個元素代表 A 區域 
locate_list=[1, 10, 19, 28, 37, 46, 55, 64, 39, 73, 82, 2, 11, 20, 48, 29, 38, 47, 56, 65, 74, 83, 21, 3, 12, 30]

# 每個行政區域的英文縮寫,第一個元素代表 A 區域
locate_eng=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']

# 存放符合的行政區域編號所對應的索引
ans=[]

# 計數符合的行政區域數量
count=0

# 把輸入存放至一個列表中
id=list(input())

# 計算身份證字號的後九碼, 第九碼不計算
sum_num=0
for i in range(0,9,1):
sum_num=sum_num+int(id[i])*(8-i)

# 計算測試碼
test=10-int(id[8])
# 測試碼 + 餘數碼 = 檢查碼

# 在所有可能的行政區域編號中,搜尋符合的行政區域編號
for i in range(0,26,1):
if (sum_num+locate_list[i])%10 == test%10:
ans.append(i)
count+=1

# 印出所有符合的行政區域編號所對應的英文字母
for i in range (0,count,1):
print(locate_eng[ans[i]],end='')

a054. 電話客服中心



作者: 微風