【臺灣ID驗證系列】自然人憑證編號驗證

操作手冊寫累了,決定換換口味寫點輕鬆的。
這次來寫寫自然人憑證編號驗證。

自然人憑證
自然人憑證(圖片來源: 臺中市沙鹿區戶政事務所


編號規則

自然人憑證編號的規則頗簡單:

  • 總長度為 16 碼字元
  • 前 2 碼為大寫英文
  • 後 14 碼為數字



程式碼

如果用 Regular Expression 來實做還挺簡單的:

1
^[A-Z]{2}[0-9]{14}$


寫完了 C/C++,這次換成 Golang。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main

import (
    "fmt"
    "os"
    "regexp"  
)

func checkCitizenDigitalCertificate(digital string) bool {
    r, _ := regexp.Compile("^[A-Z]{2}[0-9]{14}$") 
    return r.MatchString(digital)
}

func main () {
    digital :=  os.Args[1]
    is_verify := checkCitizenDigitalCertificate(digital)
    fmt.Println(is_verify)
}

加點錯誤訊息:

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package main

import (
    "fmt"
    "os"
)

func checkCitizenDigitalCertificate(digital string) bool {

    if len(digital) != 16 {
        fmt.Println("Fail,長度不正確");
        return false
    }

    letter := digital[:2]
    number := digital[2:]
    
    for _, l := range letter {
        if l < 64 || l > 91{
            fmt.Println("Fail,字首非為大寫字母");
            return false
        } 
    }

    for _, l := range number {
        if l < 48 || l > 57{
            fmt.Println("Fail,尾14碼非數字");
            return false
        } 
    }

    return true
}


func main () {
    digital :=  os.Args[1]
    is_verify := checkCitizenDigitalCertificate(digital)
    fmt.Println(is_verify)
}

$> go build main.go
$> ./main AB12345678901234



參考資料

  1. (2017-12-05)。手機條碼、自然人憑證條碼與捐贈碼檢核規則 。檢自 鯨躍科技有限公司官方網站 (2020-12-17)。



更新紀錄

最後更新日期:2020-12-31
     
  • 2020-12-31 發布
  •  
  • 2020-12-17 完稿
  •  
  • 2020-12-17 起稿