解答 def validate_id(id_number): # 身分證字號的英文代號對應數字表 id_map = { '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 } # 取出第一個字母並轉換成對應的數字 first_char = id_number[0] if first_char not in id_map: return "fake" num = id_map[first_char] # 依規則計算數字 sum = (num // 10) + (num % 10) * 9 # 各數字從右到左依次乘 1, 2, 3, 4, ..., 8 weights = [8, 7, 6, 5, 4, 3, 2, 1] for i in range(1, 9): sum += int(id_number[i]) * weights[i - 1] # 最後一碼 sum += int(id_number[9]) # 判斷是否整除 10 if sum % 10 == 0: return "real" else: return "fake" # 讀取輸入 id_number = input().strip() # 驗證身分證字號 result = validate_id(id_number) # 輸出結果 print(result) |
思路 這是一個可以用 Python 來實現的判斷台灣身分證字號是否合法的程序。以下是完整的程式碼: ```python def validate_id(id_number): # 身分證字號的英文代號對應數字表 id_map = { '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 } # 取出第一個字母並轉換成對應的數字 first_char = id_number[0] if first_char not in id_map: return "fake" num = id_map[first_char] # 依規則計算數字 sum = (num // 10) + (num % 10) * 9 # 各數字從右到左依次乘 1, 2, 3, 4, ..., 8 weights = [8, 7, 6, 5, 4, 3, 2, 1] for i in range(1, 9): sum += int(id_number[i]) * weights[i - 1] # 最後一碼 sum += int(id_number[9]) # 判斷是否整除 10 if sum % 10 == 0: return "real" else: return "fake" # 讀取輸入 id_number = input().strip() # 驗證身分證字號 result = validate_id(id_number) # 輸出結果 print(result) ``` 這段程式碼會根據輸入的身分證字號判斷其是否合法。你可以將這段程式碼複製到你的 Python 環境中運行,並輸入身分證字號來測試其合法性。 ### 測試範例 你可以使用以下測試範例來驗證程式的正確性: #### 範例輸入 #1 ``` T112663836 ``` #### 範例輸出 #1 ``` real ``` #### 範例輸入 #2 ``` S154287863 ``` #### 範例輸出 #2 ``` fake ``` 這樣應該可以正確判斷身分證字號的合法性。如果還有其他問題或需求,請隨時告訴我! |