UNPKG

cie-calculator-flap

Version:

Easily generate CIE References

93 lines (71 loc) 2.59 kB
'use strict'; var CIEStrategy = require('./cie_strategy.js').CIEStrategy; var CIEUtils = require('./cie_utils.js').CIEUtils; var cieUtils = new CIEUtils(); var Alg27 = function() {}; Alg27.prototype = new CIEStrategy(); Alg27.prototype = { execute: function(input) { var validationRules = { reference: {length: {min: 1, max: 18}}, account: {length: {min: 1, max: 8}}, branch: {length: {min: 1, max: 8}} }; if (!cieUtils.validateInput(input, validationRules)) { var error = new Error('Longitud invalida'); error.status = '422'; throw error; } return applyAlgorithm27(input.reference, input.branch, input.account); } }; module.exports.Alg27 = Alg27; let applyAlgorithm27 = (reference, sucursal, account) => { let validator = new RegExp(/^[0-9A-Z]{3,20}$/g) let referenceEncoder = { "A": 2, "B": 2, "C": 2, "D": 3, "E": 3, "F": 3, "G": 4, "H": 4, "I": 4, "J": 5, "K": 5, "L": 5, "M": 6, "N": 6, "O": 6, "P": 7, "Q": 7, "R": 7, "S": 8, "T": 8, "U": 8, "V": 9, "W": 9, "X": 9, "Y": 0, "Z": 0, "0": 0, "1": 1, "2": 2, "3": 3, "4": 4, "5": 5, "6": 6, "7": 7, "8": 8, "9": 9, }; let fullReference = ""; // let sucursal = "7006"; // let account = "00863367"; if(validator.test(reference)) { for(let letter of reference){ fullReference += referenceEncoder[letter]; } while(fullReference.length < 18){ fullReference = `0${fullReference}`; } fullReference = `${account}${fullReference}`; fullReference = `00000${fullReference}`; fullReference = `${sucursal}${fullReference}`; let serie = [1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]; let results = []; let serieIndex = 12; fullReference = fullReference.split("").reverse().join(""); for(let number of fullReference) { //console.log(`${number} * ${serie[serieIndex]} = ${number * serie[serieIndex]}`); results.push(number * serie[serieIndex]); serieIndex = (serieIndex !== 0) ? serieIndex - 1 : 12; } let sum = 0; for(let result of results){ sum += result; } let res = sum % 97; let digits = 99 - res; let getDigits = (number) => { return (number.toString().length === 2) ? number : `0${number}`; }; //document.getElementById("response").innerHTML = `${reference}${getDigits(digits)}`; return `${reference}${getDigits(digits)}`; } else { //alert("Input invalid"); return; } };