cie-calculator-flap
Version:
Easily generate CIE References
97 lines (80 loc) • 2.74 kB
JavaScript
;
var CIEStrategy = require('./cie_strategy.js').CIEStrategy;
var CIEUtils = require('./cie_utils.js').CIEUtils;
var cieUtils = new CIEUtils();
var Alg81 = function() {};
Alg81.prototype = new CIEStrategy();
Alg81.prototype = {
execute: function(input) {
var validationRules = {
reference: {length: {min: 21, max: 49}}
};
if (!cieUtils.validateInput(input, validationRules)) {
var error = new Error('Longitud invalida');
error.status = '422';
throw error;
}
return alg81(input.reference);
}
};
module.exports.Alg81 = Alg81;
function alg81(reference){
var digitVerify = algorithm(reference.toUpperCase());
var reference81 = reference + digitVerify;
return reference81;
}
function algorithm(data){
console.log(data);
var transformAlphanumeric = replaceAlphanumeric(data);
console.log(transformAlphanumeric);
var transformNumeric = buildNumeric(transformAlphanumeric);
console.log(transformNumeric);
var transformUnifyInfo = unifyInfo(transformNumeric);
console.log(transformUnifyInfo);
var digitVeirfy = "" + searchDigitVerify(transformUnifyInfo);
return digitVeirfy.charAt(digitVeirfy.length-1);
}
function replaceAlphanumeric(data){
var mapAlphanumeric = new Map([["A", 1], ["B", 2], ["C", 3], ["D", 4], ["E", 5], ["F", 6], ["G", 7], ["H", 8], ["I", 9], ["J", 1], ["K", 2], ["L", 3], ["M", 4], ["N", 5], ["O", 6], ["P", 7], ["Q", 8], ["R", 9], ["S", 1], ["T", 2], ["U", 3], ["V", 4], ["W", 5], ["X", 6], ["Y", 7], ["Z", 8]]);
var transform = "";
for (let characterData of data) {
var infoCharacter = characterData;
if(mapAlphanumeric.has(characterData)){
infoCharacter = mapAlphanumeric.get(characterData);
}
transform += infoCharacter;
}
return transform;
}
function buildNumeric(data){
var transform = [data.length];
var isSecond = true;
for(var i = data.length-1; i >= 0; i--) {
var dataNumber = Number(data.charAt(i));
var numberMultiply = isSecond ? 2 : 1;
isSecond = isSecond ? false : true;
transform[i] = (numberMultiply * dataNumber);
}
return transform;
}
function unifyInfo(data){
var transform = [];
for (let numberData of data) {
var sumData = 0;
var infoData = "" + numberData;
for (let characterData of infoData) {
sumData += Number(characterData);
}
transform.push(sumData);
}
return transform;
}
function searchDigitVerify(data){
var sumData = 0;
for (let numberData of data) {
sumData += numberData;
}
var numberAux = 10;
var residue = ((sumData % numberAux) + numberAux) % numberAux;
return numberAux - residue;
}