Last active
October 18, 2020 17:28
-
-
Save JFSolorzano/cc7ae76490372db54445 to your computer and use it in GitHub Desktop.
This file contains 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
//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 | |
} |
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
Es fiable este método de validación?