UNPKG

taiwan-taxid-validator

Version:

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

53 lines (44 loc) 1.31 kB
export default class TaxIdValidator { /** * 檢查發票號碼是否合法 * @param invoiceId 發票號碼 * @returns 是否合法 */ static isValid(invoiceId: string): boolean { 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); } private static isValidChecksum(sum: number): boolean { return sum - Math.round(sum / 5) * 5 === 0; } }