Skip to content

Instantly share code, notes, and snippets.

@JFSolorzano
Last active October 18, 2020 17:28
Show Gist options
  • Save JFSolorzano/cc7ae76490372db54445 to your computer and use it in GitHub Desktop.
Save JFSolorzano/cc7ae76490372db54445 to your computer and use it in GitHub Desktop.
//Metodo para validar nit de el salvador
public static boolean NITESA( String cadena ){//Creamos metodo estatico para poderlo llamar en cualquier parte; pedimos como datos una cadena string donde se aloja el nit
int calculo = 0;//Variable para llevar el control de la suma del algoritmo
int digitos = Integer.parseInt(cadena.substring(12, 15));//Tomamos los digitos que estan entre la posicion 12 y 15
boolean resultado;
if ( digitos <= 100 ) {//Verificamos que estos digitos sean menores o iguales a 100
for ( int posicion = 0; posicion <= 14; posicion++ ) {//Ciclo que nos ayuda a ir aumentando la posicion que se utiliza posteriormente en el algoritmo
if ( !( posicion == 4 || posicion == 11 ) ){
calculo += ( 14 * (int) ( Character.getNumericValue( cadena.charAt( posicion ) ) ) );
}//Si la posicion no es 4 ni 11 (que son los guiones) se ejecuta esta operacion
calculo = calculo % 11;//Al calculo se le va sacando el modular de 11
}
} else {
int n = 1;//Variable contadora
for ( int posicion = 0; posicion <= 14; posicion++ ){//Ciclo que nos ayuda a ir aumentando la posicion que se utiliza posteriormente en el algoritmo
if ( !( posicion == 4 || posicion == 11 ) ){
calculo = (int) ( calculo + ( ( (int) Character.getNumericValue( cadena.charAt( posicion ) ) ) * ( ( 3 + 6 * Math.floor( Math.abs( ( n + 4) / 6 ) ) ) - n ) ) );
n++;
}//Si la posicion no es 4 ni 11 (que son los guiones) se ejecuta esta operacion
}
calculo = calculo % 11;//sacamos el modular 11 de calculo
if ( calculo > 1 ){
calculo = 11 - calculo;//Si el resultado nos da mayor a uno se le resta a 11 esta respuesta
} else {
calculo = 0;//Sino el calculo lo hacemos 0
}
}
resultado = (calculo == (int) ( Character.getNumericValue( cadena.charAt( 16 ) ) ) ); //Verificamos si el calculo es direfente del resultado de nuestro algoritmo, si lo es entonces es falso
return resultado;//enviamos el resultado
}
@hrmena
Copy link

hrmena commented Nov 16, 2018

Hay que hacer una modificación a la rutina cuando el NIT es viejo o la variable código es <= 100, ese if hay que reemplazarlo por lo siguiente:

if (digitos <= 100) {// Algoritmo para NIT viejos
for (int posicion = 0; posicion <= 14; posicion++) {
if (!(posicion == 4 || posicion == 11)) {
calculo += ((15-posicion) * (int) (Character.getNumericValue(cadena.charAt(posicion))));
}
}
calculo = calculo % 11;
} else {EL CODIGO QUE YA ESTÁ EN LA RUTINA}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment