Hace tiempo que circula por Internet la siguiente leyenda urbana:
«En el DNI se indica cuántas personas de
nacionalidad española se llaman exactamente igual que tú. En la cara
donde no hay foto, abajo, hay tres líneas con números y signos de
menor. En la segunda línea, al final, hay un número que indica cuantos
se llaman igual que tú, en nombre y apellidos.»
Si acudimos a la página oficial del nuevo DNI electrónico, deja bien claro que el campo situado en la parte trasera es información impresa OCR-B destinada a la lectura mecanizada, y está regulado por la normativa recogida en el documento 9303 de la ICAO. Y como toda información destinada a ser leída por una máquina, se incluyen ciertos dígitos de control detrás de cada uno de los campos para realizar la comprobación de que la lectura ha sido satisfactoria.
La letra del DNI
Para empezar, explicaré cómo se extrae la letra del DNI, porque también esta letra sirve de control para comprobar que el número es correcto. Esto es más conocido y supongo que a muchos de vosotros al menos os sonará.
Básicamente se divide el número entre 23 y el resto se sustituye por una letra que se determina por inspección mediante la siguiente tabla:
Por ejemplo, si el número del DNI es 12345678, dividido entre 23 da de resto 14, luego la letra sería la Z: 12345678Z.
Los dígitos de control
En el DNI electrónico, el reverso tiene esta forma:
{ID}Tipo de documento.
{ESP}Nación.
{XYZ123456}Número de serie del soporte.
{a} Primer dígito de control, correspondiente al campo 3.
{12345678Z}DNI. {<<<<<<}Relleno.
{990101}Fecha de nacimiento, con el formato año/mes/día.
{b} Segundo dígito de control, correspondiente al campo 7.
{M}Sexo; Masculino o Femenino.
{111231}Fecha de vencimiento, con el formato año/mes/día.
{c} Tercer dígito de control, correspondiente al campo 10.
{ESP}Nacionalidad.
{<<<<<<<<<<<}Relleno.
{d} Cuarto dígito de control, correspondiente a la concatenación de los campos 3, 4, 5, 7, 8, 10 y 11.
{URRUTIA}Primer apellido.
{<}Limitador entre apellidos.
{URRUTIA}Segundo apellido.
{<<}Limitador entre apellidos y nombre.
{ANTXON}Nombre.
{<<<<<<<}Relleno.
Si acudimos a la página oficial del nuevo DNI electrónico, deja bien claro que el campo situado en la parte trasera es información impresa OCR-B destinada a la lectura mecanizada, y está regulado por la normativa recogida en el documento 9303 de la ICAO. Y como toda información destinada a ser leída por una máquina, se incluyen ciertos dígitos de control detrás de cada uno de los campos para realizar la comprobación de que la lectura ha sido satisfactoria.
La letra del DNI
Para empezar, explicaré cómo se extrae la letra del DNI, porque también esta letra sirve de control para comprobar que el número es correcto. Esto es más conocido y supongo que a muchos de vosotros al menos os sonará.
Básicamente se divide el número entre 23 y el resto se sustituye por una letra que se determina por inspección mediante la siguiente tabla:
Por ejemplo, si el número del DNI es 12345678, dividido entre 23 da de resto 14, luego la letra sería la Z: 12345678Z.
Los dígitos de control
En el DNI electrónico, el reverso tiene esta forma:
{ID}Tipo de documento.
{ESP}Nación.
{XYZ123456}Número de serie del soporte.
{a} Primer dígito de control, correspondiente al campo 3.
{12345678Z}DNI. {<<<<<<}Relleno.
{990101}Fecha de nacimiento, con el formato año/mes/día.
{b} Segundo dígito de control, correspondiente al campo 7.
{M}Sexo; Masculino o Femenino.
{111231}Fecha de vencimiento, con el formato año/mes/día.
{c} Tercer dígito de control, correspondiente al campo 10.
{ESP}Nacionalidad.
{<<<<<<<<<<<}Relleno.
{d} Cuarto dígito de control, correspondiente a la concatenación de los campos 3, 4, 5, 7, 8, 10 y 11.
{URRUTIA}Primer apellido.
{<}Limitador entre apellidos.
{URRUTIA}Segundo apellido.
{<<}Limitador entre apellidos y nombre.
{ANTXON}Nombre.
{<<<<<<<}Relleno.
Cálculo de los Dígitos de Control Los dígitos de control se generan a partir de otros campos a los cuales se les aplica un algoritmo sencillo. Primero se ha de separar por caracteres, por ejemplo, si el valor del campo es 12345678Z.
(este dato es el que va después de IDESP y antes de las cifras del DNI en la primera de las tres
lineas que nos ocupan en este post.:
1.[ID] 2.[ESP] 3.[12345678Z] 4.[3] 5.[<<<<<<<<<<<<<<<] 6.[741015] 7.[0] 8.[M] 9.[090322] 10.[6] 11.[ESP] 12.[<<<<<<<<<<<] 13.[3] 14.[DE
1 2 3 4 5 6 7 8 Z
Si alguno de los caracteres es una letra, se ha de cambiar por su valor numérico:
A 0 F 5 K 10 P 15 U 20 Z 25
B 1 G 6 L 11 Q 16 V 21
C 2 H 7 M 12 R 17 W 22
D 3 I 8 N 13 S 18 X 23
E 4 J 9 O 14 T 19 Y 24
Así que tenemos:
1 2 3 4 5 6 7 8 25
A estos números se les ha de aplicar el peso 7-3-1, lo que significa
que se han de multiplicar por 7, por 3 o por 1 dependiendo de su
posición:
1 2 3 4 5 6 7 8 25
7 3 1 7 3 1 7 3 1
--------------------------
7 6 3 28 15 6 49 24 25
A continuación se han de sumar los resultados de todas las multiplicaciones:
7 + 6 + 3 + 28 + 15 + 6 + 49 + 24 + 25 = 163
El dígito de control es el último dígito del resultado de la suma, 3 en este caso.
Historia
Cansado de escuchar el mito de los números del DNI, decidí buscar la
solución al enigma. ¿Si no es el número de personas con tu nombre y
apellidos, qué es entonces?
Antes de saber nada sobre el origen de los dígitos de control o
saber con certeza si realmente lo eran, ya pensaba que no era probable
que ése dígito fuese lo que decían. No parecía práctico introducir un
dato que depende de tantos factores externos al portador del documento,
ya que podría volverse obsoleto con facilidad y no tendría ningún valor.
Si de verdad necesitasen saber ése dato, lo ideal sería consultarlo en
una base de datos.
Leí sobre la posibilidad de que fuesen dígitos de control en un
weblog y me pareció razonable. Lo que parecía más seguro era que el
dígito que seguía a la fecha de nacimiento y a la de caducidad se
calculaba a partir de la fecha, y mi investigación se basó en eso.
Gracias a varias amistades, me hice con unas cuantas muestras que
comparar. Intenté aplicar varios algoritmos comunes para obtener dígitos
de control, pero no tuve éxito.
Un día pude comparar dos fechas que se
diferenciaban en un sólo dígito, el segundo, concretamente. Suponiendo
que el algoritmo funcionaba con un sistema de pesos (números con los
cuales se han de multiplicar las distintas posiciones), una suma y
extracción del ultimo dígito, deduje que el peso de la segunda posición
era un 3.
Decidí afrontar el problema por fuerza bruta, ya que parecía
posible. Sólo había 10 valores distintos y 6 posiciones, así que hice un
script que aplicaba todas las combinaciones de pesos posibles y
comprobaba el resultado con todas las muestras que tenía. Salió bien y
obtuve los pesos, 7-3-1.
Así que ya sabía cómo obtener el dígito de control de las fechas,
pero había un problema para aplicarlo con el dígito que seguía el número
del DNI en la primera línea. Ése número contenía una letra, y por
tanto, tuve que deducir cómo se obtenía su valor numérico. Tras pocas
pruebas, obtuve la respuesta: A=0, B=1… Z=25.
Sólo faltaba el último dígito, el que me motivó a empezar esta
investigación. Ahora el problema era que no sabía exactamente su origen,
ya que estaba separado de los demás datos.
Estuve un tiempo haciendo pruebas y no daba con un resultado exacto.
Finalmente leí una referencia a cierto documento, 9303 de la ICAO, que
supuestamente explicaba todo esto. No pude tener acceso a dicho
documento, ya que no parece estar disponible online, pero encontré
documentos explicando el sistema de pesos 7-3-1 y su aplicación en
pasaportes, citando como fuente el documento 9303. Pero los datos OCR
del pasaporte tienen un formato distinto al del DNI, así que no conseguí
la solución, pero obtuve una pista.
El último dígito de control de los datos OCR de un pasaporte se
calcula de la misma forma que los demás digitos de control explicados en
este documento, pero su origen es una selección de los datos
anteriores. Leí que el sexo y la nacionalidad no se veían reflejados en
ése dígito de control, y entonces encontré la razón por la que no había
encontrado la respuesta hasta ese momento.
En las pruebas que había hecho, siempre incluía el caracter del
sexo. Así que tras probar sólo con los campos con dígito de control
incluido, conseguí coincidencia en todas las muestras.
Fuente