UNPKG

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
"use strict"; 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];