UNPKG

cie-calculator-flap

Version:

Easily generate CIE References

97 lines (80 loc) 2.74 kB
'use strict'; 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; }