2022年8月18日 星期四

Python a054: 電話客服中心

 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 為結束)  -->

程式結束

>>> 




沒有留言:

張貼留言

Messaging API作為替代方案

  LINE超好用功能要沒了!LINE Notify明年3月底終止服務,有什麼替代方案? LINE Notify將於2025年3月31日結束服務,官方建議改用Messaging API作為替代方案。 //CHANNEL_ACCESS_TOKEN = 'Messaging ...