Skip to content

enylin/taiwan-id-validator

Repository files navigation

taiwan-id-validator

NPM GitHub Workflow Status (branch) codecov GitHub code size in bytes npm npm

Features

  • 中華民國身分證字號驗證驗證
  • 新/舊版臺灣地區無戶籍國民、外國人、大陸地區人民及香港或澳門居民之專屬代號驗證
  • 營利事業統一編號驗證 (支援新/舊版統一編號檢查)
  • 自然人憑證編號驗證
  • 電子發票手機條碼驗證
  • 電子發票捐贈碼驗證

Table of Contents

Quick start

Browser

Include taiwan-id-validator in a script tag.

Usage:

<head>
  <title>Taiwan ID Validator</title>
  <meta charset="utf-8" />
  <script src="https://unpkg.com/taiwan-id-validator"></script>
  <script>
    const input = 'A123456789'

    if (taiwanIdValidator.isIdCardNumber(input)) { // 身分證字號、新/舊式統號
      console.log(input + ' is a valid Taiwan ID Card Number.')
    } else {
      console.log(input + ' is not a valid Taiwan ID Card Number.')
    }
  </script>
</head>

Node.js

Install with npm:

npm install taiwan-id-validator

Usage:

import { isIdCardNumber } from 'taiwan-id-validator'

const input = 'A123456789'

if (isIdCardNumber(input)) { // 身分證字號、新/舊式統號
  console.log(input + ' is a valid Taiwan ID Card Number.')
} else {
  console.log(input + ' is not a valid Taiwan ID Card Number.')
}

API

Functions

isIdCardNumber(input, options)

Name Type Description
input string The identification number to verify. This includes National Identification Numbers (身分證字號), and Unified Identification Numbers (外來人口統一證號).
options
(optional)
IdCardValidationOptions Options specifying which types of identification numbers to check
Default: { nationalId: true, uiNumber: true }
Example
isIdCardNumber('A123456789'); // true
isIdCardNumber('A123456789', { nationalId: false }); // false
isIdCardNumber('A800000014', {
  nationalId: false,
  uiNumber: {
    oldFormat: false,
    newFormat: {
      foreignOrStateless: true,
      statelessResident: false,
      hkMacaoResident: false,
      mainlandChinaResident: false
    }
  }
}) // true

isBan(input, options)

Name Type Description
input string | number The Business Administration Number (營利事業統一編號) to verify
options
(optional)
BanValidationOptions Options specifying the validation rules for BAN Numbers
Default: {}
Example
isBan('12345675'); // true
isBan('12345675', { applyOldRules: true }); // true
isBan('12345678'); // false

isDonateCode(input)

Name Type Description
input string | number The E-Invoice Donate Code (電子發票捐贈碼) to verify
Example
isDonateCode('123'); // true
isDonateCode('abc123'); // false

isMobileBarcode(input)

Name Type Description
input string The E-Invoice Mobile Barcode to verify
Example
isMobileBarcode('/+.-++..'); // true
isMobileBarcode('/12345678'); // false

isCdcNumber(input)

Name Type Description
input string The Citizen Digital Certificate Number to verify
Example
isCdcNumber('AB12345678901234'); // true
isCdcNumber('A12345678901234'); // false

Types

IdCardValidationOptions

Name Type Description
nationalId
(optional)
boolean Indicates whether to validate national identification numbers (身分證字號)
Default: true
uiNumber
(optional)
UiNumberValidationOptions | boolean Indicates whether to validate UI number (統一證號).
If a boolean value is provided instead of an object, all options within this object will inherit this boolean value.
Default: true

UiNumberValidationOptions

Name Type Description
oldFormat
(optional)
boolean Indicates whether to validate old format UI numbers (舊式統一證號)
Default: true
newFormat
(optional)
NewUiValidationOptions | boolean Indicates whether to validate new format UI numbers (新式統一證號).
If a boolean value is provided instead of an object, all options within this object will inherit this boolean value.
Default: true

NewUiValidationOptions

Name Type Description
foreignOrStateless
(optional)
boolean Indicates whether to validate foreigners or stateless persons (外國人或無國籍人士)
Default: true
statelessResident
(optional)
boolean Indicates whether to validate stateless residents (無戶籍國民)
Default: true
hkMacaoResident
(optional)
boolean Indicates whether to validate Hong Kong or Macao residents (香港澳門居民)
Default: true
mainlandChinaResident
(optional)
boolean Indicates whether to validate Mainland China residents (大陸地區居民)
Default: true

BanValidationOptions

Name Type Description
applyOldRules
(optional)
boolean Indicates whether to validate the input using the old format rules.
Default: false

Migration from v1

  • 為了跟政府單位使用詞彙統一並避免與統一證號英文 UI number 產生混淆,將 isGuiNumber 改為 isBan
  • 營利事業統一編號已於2023年4月更新檢查邏輯,isBan 預設使用新版邏輯,若要使用舊版邏輯可使用 applyOldRules 選項。可參考新式外來人口統一證號專案說明
  • 因外來人口統一證號與國民身分證字號使用情境以及驗證程式邏輯雷同,將原本 isNationalIdentificationNumberValidisResidentCertificateNumberValidisNewResidentCertificateNumberValidisOriginalResidentCertificateNumberValid 四個函數合併為 isIdCardNumber,並增加參數控制驗證範圍。
  • isEInvoiceCellPhoneBarcodeisCitizenDigitalCertificateNumberisEInvoiceDonateCode 也都修改成較精簡名稱以利程式開發及閱讀。

Additional Information

外僑的統一證號由何機關配賦及如何編排?

自96年1月2日起:

1.由內政部移民署針對港、澳、大陸地區人民及華僑於核發臺灣地區居留證時,配賦統一證號。

2.由內政部移民署針對一般之外僑於核發外僑居留證時,配賦統一證號。

3.未曾取得前述機關所發證件,而有申報所得稅需要之已入境外國人或在臺無戶籍本國人,一般外僑可由當事人或被委託人檢附護照,向當地移民署提出申請,港、澳、大陸地區人民及華僑則檢附臺灣地區入出境許可證件,向移民署及其所屬臺中、高雄及花蓮服務處提出申請發給「中華民國統一證號基資表」。

內政部移民署自110年1月2日起,辦理現行外來人口統一證號(以下簡稱舊式統號)全面換發為新式統一證號(以下簡稱新式統號),有關統一證號之編排方式如下:

舊式統號:「統一證號」計有10個欄位,第1碼為區域碼,第2碼依據性別及核發機關分別為AB,CD,第3碼至第9碼為流水號,第10碼為檢查碼。

新式統號:「統一證號」計有10個欄位,第1碼為區域碼,第2碼為性別碼(8為男生,9為女生),第3碼為身分碼(數字0-6為外國人或無國籍人士、7為無戶籍國民、8為香港澳門居民、9為大陸地區人民),第4碼至第9碼為流水號,第10碼為檢查碼。

參考資料:

  1. 新式外來人口統一證號專案說明
  2. 新式外來人口統一證號懶人包
  3. 外僑的統一證號由何機關配賦及如何編排?
  4. Introduction to the Replacement Issuance of New UI No. for Foreign Nationals

新式統一編號

一、營利事業統一編號(下稱統一編號)供營利事業及扣繳單位配號使用,預估空號將於113年用罄。
二、為擴增統一編號號碼並與現行配賦之統一編號相容(新舊統一編號格式相同),後續請公私部門配合修改統一編號檢核程式,主要係修正「檢查邏輯由可被『10』整除改為可被『5』整除」,相關說明詳如附件。
三、全國公私部門倘有使用統一編號檢核程式,請於112年3月31日前完成統一編號檢核程式修改作業,相關系統文件請併同檢視修正。
四、預計112年4月以後,將視舊號餘存狀況逐步釋出新產製之統一編號。

參考資料: