筆記目錄

Skip to content

臺灣證號檢核

TLDR

  • 台灣各類證號(身分證、居留證、遊民證等)的檢查碼驗證邏輯完全一致。
  • 應建立統一的底層驗證邏輯,而非針對不同證號分別撰寫 API,以簡化維護成本。
  • 證號驗證的核心差異僅在於「第二碼(性別碼)」的對應規則。
  • 英文代碼轉數字時,需參考特定的對應表,且部分字母(如 I, O, W, X, Y, Z)有特殊的轉換數值。

統一驗證邏輯的重要性

什麼情況下會遇到這個問題:當系統需要同時支援國民身分證、居留證、遊民證等多種證號驗證時。

若針對每種證號分別撰寫驗證 API,容易導致命名混亂、參數格式不一,且維護成本極高。事實上,上述所有證號的檢查碼計算公式皆相同,差異僅在於第二碼(性別碼)的定義。建議建立一個共用的底層驗證函式,將不同證號的性別碼規則封裝為參數傳入,即可大幅簡化代碼。

編碼原則與計算方式

完整的證號格式包含區域碼、性別碼、身分碼、流水碼與檢查號。

性別碼對應表

什麼情況下會遇到這個問題:在處理不同類型的證號時,需正確識別性別碼的定義。

證號類型
國民身分證號12
臺灣地區居留證統一證號AB
外僑居留證統一證號CD
遊民證號YX
新式外來人口統一證號89

TIP

  • 遊民證號的男 Y 女 X 並非筆誤,推測與染色體編碼邏輯有關。
  • 新式外來人口統一證號已將舊有的居留證類型整合,並改用身分碼區隔地區。

轉換與計算規則

什麼情況下會遇到這個問題:在執行檢查碼運算前,需將英文代碼轉換為數值。

  1. 英文轉數字對應表
    • 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。
  2. 性別碼處理
    • 數字:直接使用。
    • 英文:轉為數字後,取其個位數。
  3. 加權權重
    • 對應位置 N0 至 N10 的權重分別為:1, 9, 8, 7, 6, 5, 4, 3, 2, 1, 1。
  4. 檢查碼公式
    • (N0 × 1 + N1 × 9 + N2 × 8 + N3 × 7 + N4 × 6 + N5 × 5 + N6 × 4 + N7 × 3 + N8 × 2 + N9 × 1 + N10 × 1) % 10 = 0

程式碼實作建議

什麼情況下會遇到這個問題:需要快速導入標準化的驗證邏輯時。

為了避免重複造輪子,建議參考標準的驗證實作。以下提供一份 C# 的驗證邏輯參考連結,開發者可擷取其中的核心驗證邏輯進行封裝:

異動歷程

  • 2023-01-16 初版文件建立。