a054: 電話客服中心
#a054: 電話客服中心
'''
服務他們的客戶。為了加速身分的查核,常常會要求打電話進來的客戶輸入他的身分證號碼。
可是電話上只有數字鍵,要輸入身分證號碼的第一個字母有點麻煩,因此有的語音系統會要
求來電者輸入後 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。
輸入說明
輸入只有一行,含有一個身份證號碼的後 9 碼。
輸出說明
將可能的第一位大寫字母依字母順序輸出於一行。
10 - check code = x mod 10
x = 英文字母 + s
'''
# 建立字母與數字對照表
table1 = {'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}
table2 = {'1': 'A','10':'B','19':'C','28':'D','37':'E','46':'F','55':'G','64':'H','39':'I',
'73':'J','82':'K','2':'L','11':'M','20':'N','48':'O','29':'P','38':'Q','47':'R',
'56':'S','65':'T','74':'U','83':'V','21':'W','3':'X','12':'Y','30':'Z'}
ID={ "A":1,"B":10,"C":19,"D":28,"E":37,
"F":46,"G":55,"H":64,"I":39,"J":73,
"K":82,"L":2,"M":11,"N":20,"O":48,
"P":29,"Q":38,"R":47,"S":56,"T":65,"U":74,
"V":83,"W":21,"X":3,"Y":12,"Z":30}
List1 =[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]
print('身分證號碼的最後一碼是「檢查碼」,它是用前 9 碼所推算出來的',end='\n\n')
while True:
N = (input('請輸入<身份證號碼的後9碼> 。 (EOF 為結束) -->'))
if N == '':
print('程式結束')
break
N1=list(N)
s = 0 # 建立變數 s 作為計算使用
for i in range(8):
s = s + int(N1[i])*(8-i) # 根據公式算出 s
print(s)
#10 - check code = x mod 10
# x = 英文字母 + s
N2=10-int(N1[8])
for j in range (len(table1)):
N3=List1[j]
x=N3+s
#print (x,end=' ')
x = x % 10
#N3=((s+table.get[j]) % 10)
#print( N2,x,N3)
if (N2==x) :
N4=str(N3)
print( N2,x,N3,end='-->')
print (table2.get(N4))
Python 3.7.9 (bundled)
>>> %Run a054.py
身分證號碼的最後一碼是「檢查碼」,它是用前 9 碼所推算出來的
請輸入<身份證號碼的後9碼> 。 (EOF 為結束) -->130245675
89
5 5 46-->F
5 5 56-->S
請輸入<身份證號碼的後9碼> 。 (EOF 為結束) -->123456789
120
1 1 1-->A
1 1 11-->M
1 1 21-->W
請輸入<身份證號碼的後9碼> 。 (EOF 為結束) -->
程式結束
>>>
沒有留言:
張貼留言