format-utils
Version:
Utilities for validating various formats of Indian system codes like Mobile, PAN, AADHAAR, GST and more!
37 lines (36 loc) • 1.25 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.Verhoeff = void 0;
class Verhoeff {
static validate(value) {
const digits = [...value.replace(/\s/g, '')].reverse().map((digit) => parseInt(digit, 10));
const checksum = digits.reduce((prev, current, index) => {
return Verhoeff.multiplication[prev][Verhoeff.permutation[index % 8][current]];
}, 0);
return checksum === 0;
}
}
exports.Verhoeff = Verhoeff;
Verhoeff.multiplication = [
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[1, 2, 3, 4, 0, 6, 7, 8, 9, 5],
[2, 3, 4, 0, 1, 7, 8, 9, 5, 6],
[3, 4, 0, 1, 2, 8, 9, 5, 6, 7],
[4, 0, 1, 2, 3, 9, 5, 6, 7, 8],
[5, 9, 8, 7, 6, 0, 4, 3, 2, 1],
[6, 5, 9, 8, 7, 1, 0, 4, 3, 2],
[7, 6, 5, 9, 8, 2, 1, 0, 4, 3],
[8, 7, 6, 5, 9, 3, 2, 1, 0, 4],
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0],
];
Verhoeff.permutation = [
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[1, 5, 7, 6, 2, 8, 3, 0, 9, 4],
[5, 8, 0, 3, 7, 9, 6, 1, 4, 2],
[8, 9, 1, 6, 0, 4, 3, 5, 2, 7],
[9, 4, 5, 3, 1, 2, 6, 8, 7, 0],
[4, 2, 8, 6, 5, 7, 3, 9, 0, 1],
[2, 7, 9, 3, 8, 0, 6, 4, 1, 5],
[7, 0, 4, 6, 9, 1, 3, 2, 5, 8],
];
Verhoeff.inverse = [0, 4, 3, 2, 1, 5, 6, 7, 8, 9];
;