taiwan-taxid-validator
Version:
A validator for Taiwan uniform invoice numbers (統一發票號碼驗證器)
53 lines (44 loc) • 1.31 kB
text/typescript
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;
}
}