UNPKG

cie-calculator-flap

Version:

Easily generate CIE References

157 lines (132 loc) 4.91 kB
'use strict'; var _ = require('underscore'); var CIEStrategy = require('./cie_strategy.js').CIEStrategy; var CIEUtils = require('./cie_utils.js').CIEUtils; var cieUtils = new CIEUtils(); var Alg89 = function() {}; Alg89.prototype = new CIEStrategy(); Alg89.prototype = { execute: function(input) { var validationRules = { reference: {length: {min: 1,max: 42}}, date: {length: {min: 8,max: 8}}, amount: {length: {min: 1,max: 12}} }; if (!cieUtils.validateInput(input,validationRules )) { throw new Error('Longitud invalida'); } return alg89(input.date, input.amount, input.reference); } }; module.exports.Alg89 = Alg89; var contantLeft = 0; var yearBase = 2013; var yearMultiply = 372; var unitSubtraction = 1; var monthMultiply = 31; var digitVerifyConstant = 2; var mapAlphanumeric = new Map([["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]]); function alg89(dateExpired, amount, reference){ var digitVerifyDate = algorithmDate(dateExpired); var amountFormat = convertToPounds(amount); var digitVerifyAmount = algorithmAmount(amountFormat); console.log(digitVerifyDate); console.log(digitVerifyAmount); console.log(reference); var reference89 = reference + digitVerifyDate + digitVerifyAmount + digitVerifyConstant; var digitVerifyReference = algorithmReference(reference89.toUpperCase()); console.log(digitVerifyReference); reference89 = reference89 + digitVerifyReference; return reference89; } function convertToPounds(str) { var n = Number.parseFloat(str); if(!str || isNaN(n) || n < 0) return 0; return n.toFixed(2); } function algorithmReference(data){ console.log(data); var dataReplace = replaceAlphanumeric(data); var isPosition = 1 var mapMultiply = new Map([[1, 11], [2, 13], [3, 17], [4, 19], [5, 23]]); var sumData = 0; for(var i = dataReplace.length-1; i >= 0; i--) { var dataNumber = Number(dataReplace.charAt(i)); var numberMultiply = 0; if(mapMultiply.has(isPosition)){ numberMultiply = mapMultiply.get(isPosition); }else{ isPosition = 1; numberMultiply = mapMultiply.get(isPosition); } isPosition++; var resultMultiply = (numberMultiply * dataNumber); sumData += resultMultiply; } console.log(sumData); var numberAux = 97; var residue = ((sumData % numberAux) + numberAux) % numberAux; return missingData(2, (residue + 1).toString()); } function replaceAlphanumeric(data){ var transform = ""; for (let characterData of data) { var infoCharacter = characterData; if(mapAlphanumeric.has(characterData)){ infoCharacter = mapAlphanumeric.get(characterData); } transform += infoCharacter; } return transform; } function algorithmAmount(data){ console.log(data); var dataTransform = data.split('.').join(""); console.log(dataTransform); var isPosition = 1 var mapMultiply = new Map([[1, 7], [2, 3], [3, 1]]); //var isThree = true; //var isSecond = false; var sumData = 0; for(var i = dataTransform.length-1; i >= 0; i--) { var dataNumber = Number(dataTransform.charAt(i)); var numberMultiply = 0; if(mapMultiply.has(isPosition)){ numberMultiply = mapMultiply.get(isPosition); }else{ isPosition = 1; numberMultiply = mapMultiply.get(isPosition); } isPosition++; var resultMultiply = (numberMultiply * dataNumber); sumData += resultMultiply; } console.log(sumData); var numberAux = 10; var residue = ((sumData % numberAux) + numberAux) % numberAux; return residue.toString().charAt(residue.toString().length-1); } function algorithmDate(data){ console.log(data); var dayData = data.substring(0, 2); var monthData = data.substring(2, 4); var yearData = data.substring(4, 8); var yearSubtraction = yearData - yearBase; console.log(yearSubtraction); var yearresultMultiply = yearSubtraction * yearMultiply; console.log(yearresultMultiply); var monthResultSubtraction = Number(monthData) - unitSubtraction; console.log(monthResultSubtraction); var monthResultMultiply = monthResultSubtraction * monthMultiply; console.log(monthResultMultiply); var dayResultSubtraction = Number(dayData) - unitSubtraction; console.log(dayResultSubtraction); return missingData(4, yearresultMultiply + monthResultMultiply + dayResultSubtraction); } function missingData(minLengthMissing, data){ var missingLeft = minLengthMissing - data.length; for (var i = 0; i < missingLeft; i++) { data = contantLeft + data; } return data; }