UNPKG

taiwan-taxid-validator

Version:

A validator for Taiwan uniform invoice numbers (統一發票號碼驗證器)

44 lines (43 loc) 1.45 kB
export default class TaxIdValidator { /** * 檢查發票號碼是否合法 * @param invoiceId 發票號碼 * @returns 是否合法 */ static isValid(invoiceId) { const checkKey = [1, 2, 1, 2, 1, 2, 4, 1]; let isum = 0; let isum1 = 0; let isum2 = 0; if (invoiceId.length !== 8 || isNaN(Number(invoiceId))) { return false; } for (let i = 0; i < 8; i++) { const currentDigit = parseInt(invoiceId.charAt(i), 10); const product = checkKey[i] * currentDigit; const a = Math.floor(product / 10); const b = product % 10; if (i === 6 && invoiceId.charAt(6) === '7') { isum1 = isum + 1; isum2 = isum; } else { isum += a + b; } } if (invoiceId.charAt(6) === '7') { const lastDigit = parseInt(invoiceId.charAt(7), 10); const product = checkKey[7] * lastDigit; const a = Math.floor(product / 10); const b = product % 10; isum1 += a + b; isum2 += a + b; return (TaxIdValidator.isValidChecksum(isum1) || TaxIdValidator.isValidChecksum(isum2)); } return TaxIdValidator.isValidChecksum(isum); } static isValidChecksum(sum) { return sum - Math.round(sum / 5) * 5 === 0; } }