Saltar al contenido

Calcular la letra del DNI.

En java, se puede calcular la letra del DNI de una manera fácil y sencilla que como ya se sabe, es obligatorio en España desde los 14 años.

Es importante también saber que el documento nacional de identidad o DNI es personal e intransferible. Se compone de un número de 8 cifras y un caracter de control.

Estos caracteres de control son las letras del abecedario, excluyendo la I y la O para que no sean confundidos con el uno y el cero. También se excluye la Ñ para evitar que se confunda con la letra N

Además, hoy en día, también podemos hacer uso de lo que llamamos DNI electrónico para realizar trámites online.

Índice de contenidos

    Como calcular la letra del DNI en java.

    Cuando hablamos del DNI, hablamos del documento en sí propiamente dicho. Este documento, como hemos dicho, se compone de 8 dígitos más una letra de control.

    Esto quiere decir, que realmente lo que estamos calculando es el caracter de control de un N.I.F., también llamado Número de identificación fiscal.

    Para ello, lo que haremos será dividir ese número de 8 dígitos entre 23. Una vez tengamos el resultado, nos interesará el valor del resto de dicha división, que es la que utilizaremos para asignar la letra a dicho número, según la siguiente tabla.

    Tabla de caracteres de control para el Numero de Identificación Fiscal (NIF).

    Resto01234567891011
    LetraTRWAGMYFPDXB
    Tabla para calcular la letra del DNI
    1213141516171819202122
    NJZSQVHLZKS
    Tabla para calcular la letra del DNI (continuación).

    Programa para calcular la letra del DNI en java.

    Para calcular la letra de DNI en java, vamos a utilizar dos clases. Una que llamaremos ObtenerDNI además de la clase Principal que contendrá el método main.

    Construcción de la clase ObtenerDNI.

    package PracticasBasicas;
    
    public class ObtenerDNI {
    
        // Declaramos una variable tipo String para almacenar el número del DNI
        private String numDNI="";
        // Declaramos una variable de tipo entero para pasar a número lo que
        // el usuario introduce por teclado que necesariamente debe ser un núermo
        private int numeroDNI=0;
        
        // Declaramos un array de caracteres tipo char
        private char [] letrasDNI={'T','R','W','A','G', 'M','Y','F','P','D','X'
                ,'B','N','J','Z','S','Q','V','H','L','C','K','E'};
        
        // Constructor de la clase al que se le pasa por parámetro lo que
        // el usuario introduce por teclado.
        public ObtenerDNI(String numeroDNI){
            
            // Le pasamos por parámetro al constructor de la clase lo que el
            // usuario introduce por teclado.
            this.numDNI=numeroDNI;
        }
        
        // Metodo que devuelve lo que el usuario introduce
        // converdigdo en número. Ese número se divide entre 23
        // y el método devuelve el resto de la division.
        public int getNumDNI(){
            
            try{
                // Si lo que el usuario introduce se puede transformar en númérico
                // se salta el catch por lo tanto devolverá el número del DNI,
                // el cual dividiremos entre 23 y almacenaremos el resto en la
                // variable llamada numeroDNI a la cual le reasignaremos el valor.
                this.numeroDNI= Integer.parseInt(numDNI);
                
                // Dividimos el número introducido por el usuario entre 23
                // y obtenemos el resto de la division.
                this.numeroDNI=(this.numeroDNI%23);
            }
            catch (NumberFormatException e){
                // Si no se puede tranformar en entero se ejecuta el catch
                // por lo que devolverá -1
                return -1;
            }
            // Si todo es correcto, devolverá el número del DNI
            return this.numeroDNI;
        }
        
        // Sobreescribimos el método toString de la clase Object que devolverá
        // el DNI con la letra correspondiente.
    
        @Override
        public String toString() {
            
            // Devolvemos el número del DNI y la letra correspondiente.
            return this.numDNI + this.letrasDNI[numeroDNI];
        }
    }
    

    Construcción de la clase princpal con el método main.

    Para pedir los datos al usuario utilizaremos un bucle do – while, así como un cuadro de diálogo JOptionPane. Si lo deseas, también puedes utilizar para este ejercicio la clase Scanner ya vista anteriormente.

    package PracticasBasicas;
    
    import javax.swing.JOptionPane;
    
    public class Principal {
        
        // Declaramos una variable para almacenar lo que se le pide al usuario
        private static String numeroDNI="";
        
        // Declaramos una variable para crear una instancia de la clase ObtenerDNI
        private static ObtenerDNI dni=null;
        
        public static void main(String[] args) {
            
            // Instanciamos la clase ObtenerDNI, pasandole por parametro en el
            // constructor el valor que introdujo el usuario y que, está guardado
            // en la variable numeroDNI.
            dni = new ObtenerDNI(numeroDNI);
            
            // Pedimos el número del DNI sin la letra. Si el usuario introduce
            // la letra del DNI se le volverá a indicar que introduzca un número
            do{
                numeroDNI= JOptionPane.showInputDialog(null,
                    "Introduce el número del DNI sin la letra");
            }while (numeroDNI.isEmpty() || dni.getNumDNI()==-1);
            
            // Mostramos el DNI por consola.
            System.out.println("El DNI es: " + dni.toString());
        }
    }
    

    DESCARGAR PROYECTO