Calcular la letra del dni en java

Método para calcular la letra del dni en Java

La letra del dni se calcula de la siguiente forma:

Se dispone de una tabla de 23 letras. A cada una de las letras de la tabla se le asocia un número entero. La tabla que contiene las letras del dni es esta:

0  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22
T  R  W  A  G  M  Y  F  P  D   X   B   N   J   Z   S   Q   V   H   L   C   K   E

Para obtener la letra que corresponde a un dni se realiza la división del número de dni entre 23 sin obtener decimales y nos quedamos con el resto de la división. Este resto será un valor comprendido entre 0 y 22. La letra del dni será la que tenga asociada el valor del resto de la división. 

Por ejemplo, si queremos calcular la letra del dni 12345678 hay que realizar lo siguiente:

  • Obtenemos el resto de dividir el número entre 23: 12345678 % 23 =  14
  • Buscamos en la tabla el valor 14 y obtenemos la letra asociada al 14 que es la letra Z.

Basándonos en todo esto vamos a escribir dos métodos para calcular la letra del dni de dos formas distintas:

  1. Método para calcualr la letra del dni utilizando un array de caracteres que contiene las letras.
  2. Método para calcualr la letra del dni utilizando un String formado por todas las letras.

Solución :

1. Calcular la letra del dni utilizando un array de caracteres

El método recibe el número que corresponde al dni, obtiene el resto de dividir el dni entre 23 y utiliza este valor como índice del array de caracteres que contiene las letras. Devuelve la letra que se encuentra en la posición indicada por el resto de la división.

public static char obtenerLetraDNI(int dni) {
        char[] letras = {'T', 'R', 'W', 'A', 'G', 'M', 'Y', 'F', 'P', 'D', 'X',
                         'B', 'N', 'J', 'Z', 'S', 'Q', 'V', 'H', 'L', 'C', 'K', 'E'};                             
        return letras[dni % 23];
}

2. Calcular la letra del dni utilizando un String

Igual que en el método anterior, se recibe el número que corresponde al dni, se obtiene el resto de dividir el dni entre 23 y en este caso se utiliza este valor como índice dentro del String. El método devuelve la letra que se encuentra en la posición indicada.

public static char obtenerLetraDNI(int dni) {
        String letras = "TRWAGMYFPDXBNJZSQVHLCKE";                                                                
        return letras.charAt(dni % 23);
}

Para comprobar los métodos podemos pedir en el método main que el usuario introduzca un número de dni e invocar al método obtenerLetraDNI para que nos devuelva la letra correspondiente

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int dni;
        do{
            System.out.print("Introduce número de DNI: ");
            dni = sc.nextInt();
        }while(dni < 1);
        System.out.println("Letra dni -> " + obtenerLetraDNI(dni));                                               
}

También podemos resolver el problema de calcular la letra del dni utilizando clases y objetos. Está resuelto en esta entrada del blog: Clase NIF java


No hay comentarios:

Publicar un comentario