cie-calculator-flap
Version:
Easily generate CIE References
93 lines (71 loc) • 2.59 kB
JavaScript
;
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;
}
};