UNPKG

cie-calculator-flap

Version:

Easily generate CIE References

150 lines (121 loc) 3.52 kB
'use strict'; var CIEStrategy = require('./cie_strategy.js').CIEStrategy; var CIEUtils = require('./cie_utils.js').CIEUtils; var cieUtils = new CIEUtils(); var Alg11 = function() {}; Alg11.prototype = new CIEStrategy(); Alg11.prototype = { execute: function(input) { var validationRules = { reference: {length: {min: 1,max: 12}}, date: {length: {min: 8,max: 8}}, amount: {length: {min: 1,max: 12}} }; if (!cieUtils.validateInput(input, validationRules)) { var error = new Error('Longitud invalida'); error.status = '422'; throw error; } /*var acc = 0; var tmpInput = input.reference.split("").reverse().join("") for(var i = 0; i < input.reference.length; i++) { acc += cieUtils.sequentialAdd( parseInt(tmpInput[i],10) * ( ( (i+1)%2 !== 0 ) ? 2 : 1) ); }*/ //return input.reference + (cieUtils.nearestMultipleOf(acc,10) - acc)%10; return checkDigits(input.reference, input.date, input.amount); } }; module.exports.Alg11 = Alg11; function checkDigits(Fpositions,Edate,APay){ /*let A=1,J=1; let B=2,K=2,S=2; let C=3,L=3,T=3; let D=4,M=4,U=4; let E=5,N=5,V=5; let F=6,O=6,W=6; let G=7,P=7,X=7; let H=8,Q=8,Y=8; let I=9,R=9,Z=9;*/ let charToNum ={ A:1,J:1, B:2,K:2,S:2, C:3,L:3,T:3, D:4,M:4,U:4, E:5,N:5,V:5, F:6,O:6,W:6, G:7,P:7,X:7, H:8,Q:8,Y:8, I:9,R:9,Z:9 }; let date = Edate; let dateBase = 2014; let dFormat = date;//.replace(/-/g, ""); //Date let day = dFormat.substr(0,2); let month = dFormat.substr(2,2); let year = dFormat.substr(-4); let d = parseInt(day); let m = parseInt(month); let y = parseInt(year); let rYear = (y - dateBase) * 372; let rMonth = (m - 1) * 31; let rDay = (d - 1); let dateConden = (rYear+rMonth+rDay); // importe let VP = [7,3,1]; let rVp = []; let iVP = 0; let imp = APay; let impFormat1 = imp.replace(/\./g, ''); let impFormat = impFormat1.replace(/,/g, ''); let iCad = impFormat.length-1; for(let cont=0; cont<=impFormat.length; cont++){ if(iVP === VP.length){ iVP = 0; }else{ let valorC = impFormat.charAt(iCad); let oVp = VP[iVP]; console.log(valorC); let op = parseInt(valorC) * oVp; rVp.unshift(op); iCad--; iVP++; } } let sum = rVp.reduce((a, b) => a + b, 0); let cDigit = (sum % 10); //let random = Math.round(Math.random()*9); let random = 2;//Math.round(Math.random()*9); let result = Fpositions+dateConden+cDigit+random; //Referencia let refVP = [11,13,17,19,23]; let rFVP = []; let irVP = 0; let iCadRef = result.length-1; for(let aux=0; aux<=result.length+2; aux++){ if(irVP === refVP.length){ irVP = 0; }else{ let valorC = result.charAt(iCadRef); let oVp = refVP[irVP]; let op = (charToNum[valorC]?charToNum[valorC]:parseInt(valorC)) * oVp; rFVP.unshift(op); iCadRef--; irVP++; } } let sumRef = rFVP.reduce((a, b) => a + b, 0); let refDigit = (sumRef % 97) + 1; let dLength = refDigit.toString(); let dLengthC = dLength.length; if( dLengthC === 1){ let Zero = '0'; let addZero = Zero+refDigit; let finalReference = result+addZero; return finalReference; }else{ let finalReference = result+refDigit; return finalReference; } // }