# a020 - 身分證檢驗
### 題目連結: [a020](https://zerojudge.tw/ShowProblem?problemid=a020)
### 題目解析
* 輸入一個身分證字號,經過身分證字串的規則驗證,求得輸入身分證字號的真假
* 此題的規則一共有 5 個部分,經過簡化濃縮後為以下三種需要處理的計算
* 英文代號轉換數字
* 數字部分依序乘上不同的基數
* 將所有部分加總並除以 10
### 題目類型
字串/數學/流程控制
### 範例測資解讀
* 輸入
* 為一個身分證字號,最左邊為英文字母,接著會連續9個數字
* 輸出
* `real / fake`,用來驗證輸入字串的正確性
### 其他注意事項
* 英文代號轉換數字表需要==刻苦工==,沒辦法用迴圈或條件式的方法快速產生,必須一個一個對照都要打出來
### 程式解析
* 此題計算規則的部分較無難度,只要依照題目所提供的規則設計程式即可
* 英文代號對照表有兩種方式設計
* 使用 `list` 儲存:需要建立兩個 `list`,一個為英文字、一個為數字
* 使用 `dictionary` 儲存
### 完整程式碼 (僅供參考)
``` Python=01
import sys
def translate_code(ch):
CODE = {'A':10, 'B':11, 'C':12, 'D':13, 'E':14,
'F':15, 'G':16, 'H':17, 'I':34, 'J':18,
'K':19, 'L':20, 'M':21, 'N':22, 'O':35,
'P':23, 'Q':24, 'R':25, 'S':26, 'T':27,
'U':28, 'V':29, 'W':32, 'X':30, 'Y':31,
'Z':33}
return CODE[ch]
#start
for s in sys.stdin:
testID = list(s)
# 英文代號轉成數字
area_code = translate_code(testID[0])
# 將個位數和十位數轉換成 x1, x2 數值
x1 = area_code//10
x2 = (area_code%10)*9
# 中間數字的乘積計算
xN = 0
for i in range(1, 8+1):
xN += (ord(testID[i])-48) * (9-i)
x9 = ord(testID[9])-48
# 求檢查碼, 加總對 10 取餘數
verify_code = (x1+x2+xN+x9)%10
if verify_code == 0:
print("real")
else:
print("fake")
```
###### tags: `基礎15題解` `APCS` `ZeroJudge`