Skip to content

Instantly share code, notes, and snippets.

@mbenedettini
Created December 20, 2018 13:51
Show Gist options
  • Save mbenedettini/0beed4d6c74ff18d828f9eee750220e6 to your computer and use it in GitHub Desktop.
Save mbenedettini/0beed4d6c74ff18d828f9eee750220e6 to your computer and use it in GitHub Desktop.
Calculo cuit
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