Vistas de página en total

Comprobación DNI

public class ComprobarNif {

// Declaro esta variable de forma estática, porque así no tengo que estanciarla  para poder usarla.
// La declaro como variable de clase para poder usarla en todo el programa
private static String dniAComprobar;

public static void main(String[] args) {

// dni a comprobar
dniAComprobar =  "2773034q";

boolean valido = comprobar();

mostrarMensaje(valido);

System.out.println("FIN DE PROGRAMA");
}

/**
     * Funcion que comprueba que un dni es correcto
* @return boolean
     */
  public static boolean comprobar(){

// Array con las letras posibles del dni en su posición
char[] letraDni = {
            'T', 'R', 'W', 'A', 'G', 'M', 'Y', 'F', 'P', 'D',  'X',  'B', 'N', 'J', 'Z', 'S', 'Q', 'V', 'H', 'L', 'C', 'K', 'E'
};

String num= "";
int ind = 0;

// boolean que nos indicara si es un dni correcto o no
boolean valido;

// existen dnis con 7 digitos numericos, si fuese el caso
// le añado un cero al principio
if(dniAComprobar.length() == 8) {
dniAComprobar = "0" + dniAComprobar;
}

// compruebo que el 9º digito es una letra
if (!Character.isLetter(dniAComprobar.charAt(8))) {
return false;
}

// compruebo su longitud que sea 9
if (dniAComprobar.length() != 9){
return false;
}

// Compruebo que lo 8 primeros digitos sean numeros
for (int i=0; i<8; i++) {

if(!Character.isDigit(dniAComprobar.charAt(i))){
return false;
}
// si es numero, lo recojo en un String
num += dniAComprobar.charAt(i);
  }

  // paso a int el string donde tengo el numero del dni
ind = Integer.parseInt(num);

// calculo la posición de la letra en el array que corresponde a este dni
ind %= 23;

// verifico que la letra del dni corresponde con la del array
if ((Character.toUpperCase(dniAComprobar.charAt(8))) != letraDni[ind]){
return false;
}
// si el flujo de la funcion llega aquí, es que el dni es correcto
return true;
} // fin comprobar

  /**
* Funcion que muestra por consola el resultado
* de la comprobacion de un dni
* @return void
* */
  static void mostrarMensaje(boolean nifValido){

if (nifValido) {
System.out.println(dniAComprobar + " es un NIF válido");
System.out.println("Parte numérica del NIF: " +
dniAComprobar.substring(0, 8) + ", letra: " + dniAComprobar.charAt(8));
} else {
System.out.println(dniAComprobar + " no es un nif válido");
}
} // Fin mostrar mensaje

} //Fin ComprobarNif

1 comentario:

  1. Hay un error en ese algoritmo. Si introduces un DNI de 7 dígitos, al preguntar si la novena posición es una letra salta una excepción. Para arreglar eso, debes preguntar primero por la longitud.
    Un saludo

    ResponderEliminar