lunes, 23 de abril de 2012

Calcular la letra del DNI en Lenguaje C

La letra del DNI es una técnica utilizada para evitar los errores al introducir los 8 números de un DNI. 

Se usan 23 letras del abecedario para el DNI que se encuentran ordenadas en una tabla específicamente así:

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

Cada letra se corresponde con un número.

La técnica para calcular el DNI es la siguiente:

- Se divide el nº de DNI entre 23.
- El resto de la división, corresponderá con la letra de ese DNI.

Así si tecleas tu DNI y te equivocas en un número, el programa compara la letra que has introducido con la que debería tener ese número. Si no coinciden, el programa te avisa.

Eso es lo que vamos a crear en C, un programa que calcule la letra de un DNI y lo compare con la letra introducida por el usuario.

{
/*Metemos en un vector las 23 letras usadas en el DNI en el orden especificado anteriormente*/
char letras[]={'T','R','W','A','G','M','Y','F','P','D','X','B','N','J','Z','S','Q','V','H','L','C','K','E'};
int dninumero;
char letra;


printf("Introduce el numero de tu DNI (sin letra): ");
scanf("%d",&dninumero);


printf("Introduce la letra de tu DNI: ");
scanf("%c",&letra);

/*Comparamos la letra introducida por el usuario con la calculada por el programa (resto de dividir el DNI entre 23)*/
if(letra==letras[dninumero%23])
{
    printf("El DNI es correcto");
}
else
{
    printf("El DNI NO es correcto");
}

}

6 comentarios:

  1. por que las litras son asi T=0 si no A=0 i gracias

    ResponderEliminar
  2. Copio el código tal cual, compilo y ejecuto el programa. Pero no me deja introducir la letra. ¿Que puedo estar haciendo mal?

    ResponderEliminar
    Respuestas
    1. Prueba con el siguiente código:

      printf("Introduzca el DNI: ");
      scanf("%d%c", &dninumero, &letra);

      Eliminar
  3. Prueba con el siguiente código:

    printf("Introduzca el DNI: ");
    scanf("%d%c", &dninumero, &letra);

    ResponderEliminar
  4. me podria hacer una breve explicacion de lo siguiente:
    if(letra==letras[dninumero%23])

    gracias!

    ResponderEliminar