ID驗證系列|居留證驗證號

這是這個系列中的最後一篇,最後就來看看居留證的驗證。

居留證樣本 居留證樣本(圖片來源: 維基百科

編碼規則

居留證編碼比較麻煩是目前有兩版的規則。在今年 2021 年的 1 月 2 日開始換發,新版「外來人口統一證號」會比照國民身分證字號編碼改版,不過為了降低能量針對藍領居留之移工是採屆期換發,因此未來可能有段時間會是兩套編碼規則並行的。

新版「外來人口統一證號」比照國民身分證字號編碼改版 新版「外來人口統一證號」比照國民身分證字號編碼改版(圖片來源: 中央社 CNA

因此,我們也分成兩部分來討論:

舊版規則

編碼的方式與身分證字號類似,居留證編碼一樣有 10 碼,一樣可以將其分成四區:區域碼性別代碼流水碼檢核碼

1 2 3 4 5 6 7 8 9 10
區域碼 性別碼 流水碼 檢核碼
A-Z 無戶籍國民與中港澳地區人民: 男:A / 女:B
外國人: 男:C / 女:D
阿拉伯數字 阿拉伯數字

身分證字號與居留證編碼,兩種編碼最大的差異在於第二碼的性別代碼。與身分證用 1、2 分別表示男女性不同,舊版居留證的性別碼依照人民來源與性別來賦予一個英文代號


整體來說,一個完整的居留證編碼如下:

區域碼 性別碼 流水碼 檢核碼
F A 1 2 3 4 5 6 8 9


在進行編碼檢查時,一樣需將首碼的區域碼換成相對應的數值,其轉換表格與身分證相同,如 F 就會被轉換成 15

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

而次碼的性別碼,也是需要依照上表將其轉成二位數字後,只取其個位數,如 A 就會被轉換成 0


將轉換完成的數值,乘上相對應的權重後進行加總:

Index $n_0$ $n_1$ $n_2$ $n_3$ $n_4$ $n_5$ $n_6$ $n_7$ $n_8$ $n_9$ $n_{10}$
權重 1 9 8 7 6 5 4 3 2 1 1

若總和為 10 的倍數,即為有效的驗證碼。


詳細的計算步驟跟身分證字號的驗證方式相同,這邊就不再算一次了。

新版規則

舊版的規則雖然與身分證字號類似,但格式還是有差異,導致在進行網路購物、訂票、醫療掛號時,會遇到證號格式不同帶來的困擾。為解決這困擾,相關機構決定統一格式,將新版居留證號比照身分證字號編碼。

1 2 3 4 5 6 7 8 9 10
區域碼 性別碼 身分碼 流水碼 檢核碼
A-Z 男:8
女:9
外國人與無國籍人士:0-6
無戶籍國民:7
港澳居民:8
大陸地區人民:9
阿拉伯數字 阿拉伯數字


除用 8、9 分別表示男女外,其他的轉換方式跟身分證字號的驗證方式相同。

程式碼

新版的驗證規則跟身分證字號的驗證一模一樣,所以我就不寫了,只寫舊版的規則。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function verifyId(id) {
    id = id.trim();
    
    <!--  js 中遇到反斜線要跳脫所以這邊用兩個反斜線 -->
    <!-- 如果你看到四個反斜線那是我為了讓 NexT.Mist 主題順利渲染所再做跳脫 -->
    verification = id.match("^[A-Z][ABCD]\\d{8}$")
	if(!verification){
		return false
	}

    let conver = "ABCDEFGHJKLMNPQRSTUVXYWZIO"
    let weights = [1, 9, 8, 7, 6, 5, 4, 3, 2, 1, 1]

    id = String(conver.indexOf(id[0]) + 10) +  String((conver.indexOf(id[1]) + 10)%10) + id.slice(2);

    checkSum = 0
    for (let i = 0; i < id.length; i++) {
        c = parseInt(id[i])
        w = weights[i]
        checkSum += c * w
    }
	
    return checkSum % 10 == 0
}

console.log(verifyId("FA12345689"));

參考資料

  1. 梁珮綺 (2021-01-03)。新版外來人口統一證號2日起換發 外國人生活更便利。檢自 中央社 CNA (2021-03-11)。
  2. 協同撰寫。外來人口統一證號編碼原則。檢自 維基百科 (2021-03-11)。
  3. gomumu (2006-11-29)。[知識+]外籍人士用的統一證號編碼規則。檢自 痞客邦(2021-03-10)。
  4. 內政部 (2019-10)。「外來人口統一證號格式專案」修正計畫(核定本)。檢自 內政部 (2021-03-10)。

更新紀錄

最後更新日期:2021-09-02
  • 2021-09-02 發布
  • 2021-03-11 完稿
  • 2021-03-10 起稿