UNPKG

cie-calculator-flap

Version:

Easily generate CIE References

50 lines (40 loc) 1.85 kB
'use strict'; var CIEStrategy = require('./cie_strategy.js').CIEStrategy; var CIEUtils = require('./cie_utils.js').CIEUtils; var cieUtils = new CIEUtils(); var Alg02 = function() {}; Alg02.prototype = new CIEStrategy(); Alg02.prototype = { execute: function(input) { var validationRules = { reference: {length: {min: 6,max: 19}} }; if (!cieUtils.validateInput(input, validationRules)) { throw new Error('Longitud invalida'); } var acc = 0; var reference = parseInput(input).reverse(); //console.log('---------'); //console.log('\Referencia:',input.reference); //console.log('\Referencia Numerica:',reference.join('')); for(var i = 0; i < reference.length; i++) { var m = ( ( (i+1)%2 !== 0 ) ? 2 : 1); //console.log(reference[i] + ' * ' + m + ' = ' + (parseInt(reference[i],10) * m) + '\tReduccion : ' + cieUtils.sequentialAdd( parseInt(reference[i],10) * m )); acc += cieUtils.sequentialAdd( parseInt(reference[i],10) * m ); } //console.log('Suma:',acc); //console.log('Multiplo 10:',cieUtils.nearestMultipleOf(acc,10)); //console.log('Digito:',(cieUtils.nearestMultipleOf(acc,10) - acc)); //console.log('Referencia Completa:',input.reference.toUpperCase() + (cieUtils.nearestMultipleOf(acc,10) - acc)); return input.reference.toUpperCase() + (cieUtils.nearestMultipleOf(acc,10) - acc); } }; module.exports.Alg02 = Alg02; var parseInput = function(input) { var charToNum = { 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, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, 0: 0 }; return cieUtils.replaceCharWithNum(input.reference.toUpperCase(), charToNum); };