DNI (de nuevo) P98532


Statement
 

pdf   zip

thehtml

Ahora que ya sabemos calcular la letra del DNI, pasamos a analizar la parte de atrás del DNI. En ella aparecen una serie de dígitos y letras como el siguiente ejemplo:

IDESP12345678Z3<<<<<<<<<<<<<<< \\
7410150M0903226ESP<<<<<<<<<<<4 \\
DE<TAL<Y<CUAL<<FULANITO<<<<<<< \\

Existe una leyenda urbana que dice que el último dígito de la segunda línea se corresponde con el número de personas que tienen el mismo nombre y apellidos que el portador del DNI. Sin embargo, tal y como se explica en la web http://jpf.sdf1.org/dni/, esto no es cierto.

Esta zona del DNI está compuesta por caracteres OCR, que están preparados para ser leídos por máquinas. Ese dígito en concreto es sólo un dígito de control para verificar que se ha leído correctamente. Podemos definir los siguientes campos en esta zona de datos:

1.[ID] 2.[ESP] 3.[12345678Z] 4.[3] 5.[<<<<<<<<<<<<<<<] \\
6.[741015] 7.[0] 8.[M] 9.[090322] 10.[6] 11.[ESP] 12.[<<<<<<<<<<<] 13.[4] \\
14.[DE<TAL<Y<CUAL<<FULANITO<<<<<<<]

1. Tipo de documento [ID]
2. Nación [ESP]
3. Número de DNI [12345678Z]
4. Dígito de control del campo 3
5. Relleno
6. Fecha de nacimiento (AAMMDD) [741015]
7. Dígito de control del campo 6
8. Sexo (M/F)
9. Fecha de caducidad [090322]
10. Dígito de control del campo 9
11. Nacionalidad [ESP]
12. Relleno
13. Dígito de control de los campos 3, 4, 6, 7, 9 y 10 concatenados
14. Nombre

Para obtener el dígito de control de un campo, se tiene que separar el campo por carácteres. Si tenemos una letra, debemos convertirla a un número de acuerdo con la siguiente tabla:


Table 1: Conversión de carácter a dígito.
||
Resto0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
LetraA 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
||

Una vez todos los carácteres han sido convertidos a dígitos, tenemos una secuencia de números. A continuación, sumamos todos los dígitos aplicando un peso 7-3-1. Esto significa que el primer dígito se multiplica por 7, el segundo por 3, el tercero por 1, el cuarto por 7, etc. La última cifra del resultado obtenido es el dígito de control. Podemos ver este proceso en el siguiente ejemplo. Tenemos el campo 12345678Z. Separamos en carácteres (1 2 3 4 5 6 7 8 Z) y convertimos la letra Z en un número (se corresponde con el 25). A continuación hacemos la suma de los números con peso 7-3-1:

1·7+2·3+3·1+4·7+5·3+6·1+7·7+8·3+9·1+25·7=163

De manera que el número de control sería el 3.

El objetivo de este problema es escribir un programa que, dados los datos de un DNI, calcule el dígito de control que se corresponde con el campo número 13. Cuidado: concatenar 2 campos significa poner el segundo campo a continuación del primero.

Entrada

La entrada consiste en una secuencia de los campos de datos de diferentes DNIs necesarios para calcular los dígitos de control (3, 6 y 9). Los campos se dan en una linea, separados por un espacio y ordenados de acuerdo con el formato previamente explicado. El campo 3 es un número de 8 cifras junto con un carácter (NIF). El campo 6 es un número de 6 cifras y el campo 9 un número de 6 cifras. Los carácteres siempre estaran escritos en mayúsculas entre ’A’ y ’Z’ (no hay minúsculas ni acentos).

Salida

Para cada número dado, escribir una línea con el dígito de control que se corresponde al campo número 13.

Public test cases
  • Input

    12345678Z 741015 090322 
    47776371N 810412 120803
    39430551H 830105 120117
    07213148A 760407 080723
    12345678Z 123456 123456
    

    Output

    4
    0
    4
    8
    0
    
  • Information
    Author
    Miquel Moretó
    Language
    Spanish
    Other languages
    English
    Official solutions
    C++
    User solutions
    C++ Python