martes, 26 de noviembre de 2013

A propósito del DNI y del NIF


Dándole vueltas a los números que "rigen nuestra vida" en esta sociedad que nos ha tocado vivir: el DNI, el NIF, y los números de cuenta de los Bancos. Hay una manera de comprobar - muy fácil - si el número del DNI que te dan es falso. Es la letra final. Dividimos el número, sin la letra, claro, por 23. El resto corresponde a una letra mayúscula según una tabla dada. Para más detalles ir a Wikipedia. Podemos ejecutar el siguiente programa:

#include<iostream>
using namespace std;
int main()
{
int dni;
cout << "Introduce el DNI: ";
cin >> dni;
cout << "TRWAGMYFPDXBNJZSQVHLCKE"[dni % 23] << endl;
return 0;
}

El programa está escrito en C++ Se copia en un editor, se compila con g++ y se ejecuta con ./a.out
Si nos fijamos en las letras, si el resto es 0 la letra es T, si 1 la letra es R, etc.
Si el resto es, por ejemplo, 10, como es mi caso, la letra de control es la X. Si te dicen, por ejemplo, que el número de identidad es 10765223 y la letra C, te están dando un número falso. Tendría que ser la G.
En el caso del NIF la cosa es un poco más complicada. Lo que viene a continuacoión lo cogí del Wiki y ¡funciona! Lo he comprobado.
En el caso de NIF que no son obtenidos a partir del DNI o NIE, el dígito de control se obtiene utilizando el número de 7 cifras, excluyendo la letra inicial y el último dígito, puesto que es el que vamos a validar.
Procedimiento:
1. Se suman las posiciones pares de los 7 dígitos centrales, es decir, no se tiene en cuenta la letra inicial ni el dígito de control. (Suma = A)
2. Por cada uno de los dígitos de las posiciones impares, se multiplica el dígito por 2 y se suman las cifras del resultado (p.e. si el dígito es 6, el resultado sería 6 x 2 = 12 -> 1 + 2 = 3). Se repite la operación con todos los dígitos en posiciones impares y se suman los resultados. (Suma = B )
3. Sumar el resultado de los 2 pasos anteriores. (A + B = C)
4. El último dígito de la suma anterior (C) se lo restamos a 10, cuyo resultado sería el dígito de control (p.e. si C = 14, el último dígito es 4, por lo que tendríamos 10 - 4 = 6). Si el último dígito de la suma del paso anterior es 0 (p.e. C = 30), no se realiza resta y se toma el 0 como dígito de control.
Si el dígito de control es un número, este sería el resultado de la última operación. Si se trata de una letra, se utilizaría la siguiente relación:
número obtenido -> 1 2 3 4 5 6 7 8 9 0
dígito de control -> A B C D E F G H I J

2 comentarios:

  1. hola Mario...me ha hecho mucha gracia lo de las letras del carnet y el NIF...
    Lo voy a comprobar.
    feliz fin de semana
    saludos
    Marina

    ResponderEliminar
  2. Pues sí. Ya ves, todos los días se aprende algo. Yo lo he comprobado con mi carnet de identidad, con un NIF y con dos cuentas de banco. En todos ha funcionado.

    ResponderEliminar