臺灣證號檢核
當一個系統有多種台灣的證號需要檢核時,常看到有人將身分證、統一證號等證號分別寫成不同的 API。這是因為網路上有很多現成的範例可以找,如果要加入驗證,直接找一個來抄就可以了。但是當檢核範例來源不同時就容易造成命名和參數的不同,當然比較 Sense 的人,會將不同的證號檢核 API 調成相同的命名規則與介面格式。
有些人可能沒有注意到,不論是「國民身分證號」、「臺灣地區居留證統一證號」、「外僑居留證統一證號」、「遊民證號」和「新式外來人口統一證號」,它們的檢查號驗證都是同一套邏輯,差別只在於第二碼。所以比較正確的檢核證號方式應該是先建立一個共同的底層,再將各種證號傳入參數來驗證第二碼。
編碼原則
完整的證號格式如下:
| 區域碼 | 性別碼 | 身分碼 | 流水碼 | 檢查號 |
|---|---|---|---|---|
| A | 1 | 2 | 345678 | 9 |
性別碼規則:
| 證號類型 | 男 | 女 |
|---|---|---|
| 國民身分證號 | 1 | 2 |
| 臺灣地區居留證統一證號 | A | B |
| 外僑居留證統一證號 | C | D |
| 遊民證號 | Y | X |
| 新式外來人口統一證號 | 8 | 9 |
TIP
- 遊民證號男 Y 女 X 這並不是筆誤,推測是因為染色體的關係,所以字母順序不是先男後女。
- 「臺灣地區居留證統一證號」和「外僑居留證統一證號」統合成「新式外來人口統一證號」後,改用身分碼來區隔是台灣地區還是外僑。
英文轉數字對應關係如下:
| A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 34 | 18 | 19 | 20 | 21 | 22 | 35 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 32 | 30 | 31 | 33 |
每位數的加權權證:
| N0 | N1 | N2 | N3 | N4 | N5 | N6 | N7 | N8 | N9 | N10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 1 |
性別碼的處理方式:
- 數字:直接使用。
- 英文:照上面對應關係轉成數字後,取個位數。
檢查號計算公式如下: (N0 × 1 + N1 × 9 + N2 × 8 + N3 × 7 + N4 × 6 + N5 × 5 + N6 × 4 + N7 × 3 + N8 × 2 + N9 × 1 + N10 × 1) % 10 = 0
範例
因為我不想再重寫一次驗證程式碼,所以我提供了一個連結,裡面有我之前寫的驗證程式碼。如果你需要的話可以擷取驗證的部分,程式碼連結:IdCardValidator。
異動歷程
- 2023-01-16 初版文件建立。
