Foros aprenderaprogramar.com
Aprender a programar => De todo un poco... => Mensaje iniciado por: paramonso en 27 de Noviembre 2018, 17:28
-
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
-
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
-
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.
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. ;)