Created
December 20, 2018 13:51
-
-
Save mbenedettini/0beed4d6c74ff18d828f9eee750220e6 to your computer and use it in GitHub Desktop.
Calculo cuit
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function getCuit(document_number, gender) { | |
/** | |
* Cuil format is: AB - document_number - C | |
* Author: Nahuel Sanchez, Woile | |
* | |
* @param {str} document_number -> string solo digitos | |
* @param {str} gender -> debe contener HOMBRE, MUJER o SOCIEDAD | |
* | |
* @return {str} | |
**/ | |
'use strict'; | |
var HOMBRE = ['HOMBRE', 'M', 'MALE'], | |
MUJER = ['MUJER', 'F', 'FEMALE'], | |
SOCIEDAD = ['SOCIEDAD', 'S', 'SOCIETY']; | |
var AB, C; | |
/** | |
* Verifico que el document_number tenga exactamente ocho numeros y que | |
* la cadena no contenga letras. | |
*/ | |
if (document_number.length != 8 || isNaN(parseInt(document_number))) { | |
if (document_number.length == 7 && !isNaN(parseInt(document_number))) { | |
document_number = '0'.concat(document_number); | |
} else { | |
// Muestro un error en caso de no serlo. | |
throw 'El numero de document_number ingresado no es correcto.'; | |
} | |
} | |
/** | |
* De esta manera permitimos que el gender venga en minusculas, | |
* mayusculas y titulo. | |
*/ | |
gender = gender.toUpperCase(); | |
// Defino el valor del prefijo. | |
if (HOMBRE.indexOf(gender) >= 0) { | |
AB = '20'; | |
} else if(MUJER.indexOf(gender) >= 0) { | |
AB = '27'; | |
} else { | |
AB = '30'; | |
} | |
/* | |
* Los numeros (excepto los dos primeros) que le tengo que | |
* multiplicar a la cadena formada por el prefijo y por el | |
* numero de document_number los tengo almacenados en un arreglo. | |
*/ | |
var multiplicadores = [3, 2, 7, 6, 5, 4, 3, 2]; | |
// Realizo las dos primeras multiplicaciones por separado. | |
var calculo = | |
((parseInt(AB.charAt(0)) * 5) + (parseInt(AB.charAt(1)) * 4)); | |
/* | |
* Recorro el arreglo y el numero de document_number para | |
* realizar las multiplicaciones. | |
*/ | |
for(var i=0;i<8;i++) { | |
calculo += (parseInt(document_number.charAt(i)) * multiplicadores[i]); | |
} | |
// Calculo el resto. | |
var resto = calculo % 11; | |
/* | |
* Llevo a cabo la evaluacion de las tres condiciones para | |
* determinar el valor de C y conocer el valor definitivo de | |
* AB. | |
*/ | |
if((SOCIEDAD.indexOf(gender) < 0)&&(resto==1)){ | |
if(HOMBRE.indexOf(gender) >= 0){ | |
C = '9'; | |
} else { | |
C = '4'; | |
} | |
AB = '23'; | |
} else if(resto === 0){ | |
C = '0'; | |
} else { | |
C = 11 - resto; | |
} | |
// Show example | |
console.log([AB, document_number, C].join('-')); | |
// Generate cuit | |
var cuil_cuit = [AB, document_number, C].join(''); | |
return cuil_cuit; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment