Autor Tema: Cual fue el primer algoritmo para hallar el NIF? Creador, motivo tabla letras  (Leído 3609 veces)

paramonso

  • Intermedio
  • ***
  • Mensajes: 241
  • El ignorante afirma, el sabio duda y reflexiona.
    • Ver Perfil
Hola. Estoy buscando en los foros la forma de implementar un algoritmo para hallar la letra del NIF y en todos me encuentro ( incluido aprederaprogramar.com) con una solución muy sencilla y es esta:
Se introduce un numero y se halla el resto de este numero y según lo que da el resto se coge una letra u otra.

Por ejemplo : 25403790 el resto es 14 por lo tanto la letra sera Z.
Posición   0   1   2   3  4   5   6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22
Letra       T   R  W  A  G   M  Y  F  P   D   X    B   N    J    Z    S   Q    V   H    L    C    K   E

Hasta aquí estoy totalmente de acuerdo con esto y con el funcionamiento ya que es correcto.

Pero la pregunta que me hago yo y que me hice en mis tiempos cuando aprendía programación en basic en los albores del primer windows, cuando todo se programaba por consola y aun no existían entornos gráficos y que solucione pero no recuerdo es:

¿Que algoritmo se utiliza para ordenar estas letras? ya que estos números no coinciden con el código ASCCI correspondiente al carácter que representa y  no pueden tener un orden aleatorio.

Orden Numerico   Orden Alfabetico   Codigo ASCII
   T0      A3      A>> 65
   R1      B11      B>> 66
   W2      C20      C>> 67
   A3      D9      D>> 68
   G4      E22      E>> 69
   M5      F7      F>> 70
   Y6      G4      G>> 71
   F7      H18      H>> 72
   P8      J13      J>> 74
   D9      K21      K>> 75
   X10      L19      L>> 76
   B11      M5      M>> 77
   N12      N12      N>> 78
   J13      P8      P>> 80
   Z14      Q16      Q>> 81
   S15      R1      R>> 82
   Q16      S15      S>> 83
   V17      T0      T>> 84
   H18      V17      V>> 86
   L19      W2      W>> 87
   C20      X10      X>> 88
   K21      Y6      Y>> 89
   E22      Z14      Z>> 90
Una manita porfi. :D
« Última modificación: 29 de Noviembre 2018, 21:40 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Buenas, he intentado buscar si existe alguna explicación para el orden de letras que se eligieron y no he encontrado nada.

Algún comentario: la letra es únicamente un código de control, para comprobar si se ha escrito mal el número. Se divide el número entre 23 y el resto (de 0 a 22) nos da la posición de la letra en una tabla determinada (no ordenada alfabéticamente).

¿Por qué la tabla tiene ese orden concreto (y no otro)?

Posiblemente porque el creador (o el equipo que creó) del sistema decidió que fuera así. Podía haber decidido cualquier otro orden y hubiera sido igualmente válido. Si el orden es aleatorio o no no lo sabemos (al menos yo no lo sé). Puede que sea aleatorio, o puede que no.

Sí tiene un sentido qué letras se eligieron, por ejemplo:

No se utilizan las letras: I, Ñ, O, U

La I y la O se descartan para evitar confusiones con otros caracteres, como 1, l o 0. La Ñ para evitar confusiones con la N.

Se usan veintitrés letras por ser éste un número primo.

Dentro del DNI se usa otra tabla, que es esta, para calcular algunos dígitos de verificación (en este caso se trata de las cadenas de letras y números que aparecen en el reverso del DNI).

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

El motivo de por qué una tabla y no otra habría que preguntárselo a quienes crearon estos algoritmos...

Salu2

paramonso

  • Intermedio
  • ***
  • Mensajes: 241
  • El ignorante afirma, el sabio duda y reflexiona.
    • Ver Perfil
Hola Ogramar.

Como explico en la pregunta por allá por el 1990 -93 hice un curso de analista programador en basic (era entonces cuando el primer windows empezaba a instalarse en los pc) y solamente se trabajaba en consola y uno de los ejercicios a resolver era averiguar el algoritmo que se utilizaba para "ordenar" estas letras.

No se ordenaban, en base a unos cálculos se hallaba el numero del código ascii de la letra correspondiente a el nif y si era una de las letras que no estaba incluida (i,o,u,ñ)
se le suma uno para coger la siguiente.
Como digo en mi consulta de esto hace por lo menos venti  tantos años (al poco de que se decidieran a crear la letra del nif  ) y ya no recuerdo como se hace ( ya que por motivos personales tuve que dejarme la programación y la estoy retomando ahora).
Pero se que hay un algoritmo para implementar todo esto.

Lo que pasa que algún tiempo después se dieron cuenta que la letra del nif era algo que se tenia que utilizar a la hora de gestionar la facturación  las empresas (entre otros documentos nominas, etc..) y no podía ser un secreto ya que esta letra era necesaria para cualquier tipo de gestión en el cual hiciera falta el nif.

De hecho hoy en día aun hay veces que para hacer algunas gestiones te preguntan solamente el numero del dni, sin preguntarte por la letra y después de introducir el numero del dni te preguntan por la letra para ver si coincide con lo que les sale en el ordenador (normalmente en los bancos si no te conocen).

Fue entonces cuando alguien decidió ( implementar el algoritmo mod23 ) ordenar las letras del 0 al 22 y utilizar el mod 23.
Pero ya te digo que existía un algoritmo para poder hacer esto y hallar la letra del código ascii correspondiente a la letra del nif y me gustaría si hay alguien que recuerde esto que me hiciera memoria.

Citar
Se usan veintitrés letras por ser éste un número primo.
Se utilizan 23 letras no por ser un numero primo sino porque las demás letras están descartadas .
1 2 3 4 5 6 7 8    9 10 11  12  13      14 15 16 17 18  19 20  21 22 23
A,B,C,D,E,F,G,H,i,J, K  , L,  M,  N,ñ,o, P,  Q,  R, S, T,  u, V, W,   X, Y,   Z.
En total son 27 letras del alfabeto y se descartan 4.

I por el 1, O por el 0, U por la V y la Ñ por que en muchos países que no son de habla hispana no se utiliza.
Un saludo. ;)


 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".