cie-calculator-flap
Version:
Easily generate CIE References
150 lines (121 loc) • 3.52 kB
JavaScript
'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;
}
//
}