jueves, 19 de enero de 2023

Hoja de Cálculo (III): cálculo de la letra del NIF

Este iba a ser el tercer ejercicio de la entrada anterior, ya que al final usaremos una función lógica, pero la entrada quedaría muy larga.


Ejercicio3. Calcular la letra asociada al DNI con una hoja de cálculo en Calc de OpenOffice.

 Como todos sabéis, o no, el NIF es el resultado de añadirle una letra al DNI, pero ¿a que no sabéis cómo se realiza el cálculo de esa letra?


Todo viene de un algoritmo llamado “módulo 23″. Éste módulo 23 es el número entero que obtenemos como resto de la división entera del DNI entre 23. Al utilizar el módulo 23, el resto resultante estará entre el 0 (cero) y el 22. ¿Liado? gráficamente lo verás mejor.
 


Y ahora… con ese 14, ¿qué hacemos? Por ahora, ¡clic!
Ese número 14 es el que define la letra que tendrá nuestro NIF; y aquí viene una incógnita, pues el orden en el que tenemos que colocar las letras es el siguiente:
                  TRWAGMYFPDXBNJZSQVHLCKE

¿Por qué este orden? No tengo ni idea, ni he encontrado la respuesta en Internet… será un secreto de estado…:)

No se utilizan las letras: I, Ñ, O, U. La I y la O se descartan para evitar confusiones con otros caracteres, como 1, l, 0…
La Ñ no se utiliza por no existir en otros países, y la U no tengo ni idea de por qué no se utiliza… será por no confundirla con la V.

Sigamos: si cogemos el 14 y empezamos a contar posiciones, nos dice que para el DNI “12345678″ su letra es la J, verdad? ERROR! tenemos que empezar a contar desde el 0, y no desde el 1 y como resultado tendremos el correcto, que es la Z.
Ahora veamos cómo podemos convertir este “tocho” en una sencilla fórmula de Calc a la que le podemos sacar mucha utilidad si trabajamos con bases de datos de personas, clientes, etc


Vamos a calcular ahora la letra con una sencilla fórmula de Calc utilizando únicamente los datos que ya sabemos: módulo 23, orden de las letras.

=MID(“TRWAGMYFPDXBNJZSQVHLCKE”;1+RESIDUO(A2;23);1)

¿Para que necesitamos MID()necesitamos saber la letra que dentro de una cadena de caracteres corresponde con la posiciones 14+1. Entonces:
=MID (“TRWAGMYFPDXBNJZSQVHLCKE”; -cadena en la que busca
           1+RESIDUO(A2;23);                      -posición desde donde
                                                                 extrae
           1)                                                 -número de caracteres que 
                                                                 extrae.
En la actualización de 2023 LibreOffice Calc ha cambiado algunas fórmulas:


Deberiamos utilizar =SI(ESBLANCO(CELDA));;) para evitar que haga la operación cuando la celda esté sin contenido (en blanco) y así sería:

=SI(ESBLANCO(A2) ¿Está vacía la celda?
 
;    Si es así no hago nada (se deja vacía)
 
 ; Si no está vacía llamo a :MID(“TRWAGMYFPDXBNJZSQVHLCKE”;1+RESIDUO(A2;23);1)
 
)

Haz un interface que sea atractiva para la utilización de esta hoja de cálculo.


No hay comentarios:

Publicar un comentario