UNPKG

zater-verhoeff

Version:

Module for create account zater

62 lines (57 loc) 1.59 kB
class Verhoeff { constructor(array) { this.d = [ [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] ]; // permutation table p this.p = [ [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] ]; // inverse table inv this.inv = [0, 4, 3, 2, 1, 5, 6, 7, 8, 9]; this.array = array; } invArray() { let array = this.array; if (Object.prototype.toString.call(array) === "[object Number]") { array = String(array); } if (Object.prototype.toString.call(array) === "[object String]") { array = array.split("").map(Number); } return array } generate() { let c = 0; const invertedArray = this.invArray(this.array); for (let i = 0; i < invertedArray.length; i++) { c = this.d[c][this.p[((i + 1) % 8)][invertedArray[i]]]; } return this.inv[c]; } validate(verify) { let c = 0; const invertedArray = this.invArray(`${this.array}${verify}`); for (let i = 0; i < invertedArray.length; i++) { c = this.d[c][this.p[(i % 8)][invertedArray[i]]]; } return (c === 0); } } export default (array) => new Verhoeff(array);