- Introducción
- Instrucciones del kata
- Manual
- Documentación para DDD
- Arquitectura de la aplicación
- Pruebas
Los ficheros que encontrarás en este repositorio son el resultado del kata "SOLID DNI KATA - SRP y OCP" propuesto en la clase de programación de Grado Superior de desarrollo Web Intensivo(2022). El reto es crear un programa que en base a unos números de identificación fiscal compruebe si tiene la extructura correcta y lo complete con el dígito control. El objetivo es desarrollarlo a partir de test (TDD) previo DDD y aplicar los principios SOLID en todo el código.
Escribe un programa que dado un número de DNI obtenga la letra del NIF. La letra correspondiente a un DNI se calcula mediante el siguiente algoritmo:
Se obtiene el resto de dividir el número de DNI entre 23. El número resultante indica la posición de la letra correspondiente a ese DNI en la siguiente cadena:
RESTO | 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 |
No se utilizan las letras: I, Ñ, O, U. La “I” y la “O” se evitan para evitar confusiones con otros caracteres, como “1”, “l” ó “0”.
Construir el programa utilizando un vector para almacenar cada una de las letras de la tabla anterior. Luego utiliza un diccionario para almacenar la tabla de asignación. Divide el código mediante una capa de lógica y una capa de acceso a datos para que los cambios en la estructura de datos utilizada (vector o diccionario) no supongan modificaciones en el código correspondiente a la lógica.
'''El artículo 11 del Real Decreto 1553/2005, de 23 de diciembre, establece que el Documento Nacional de Identidad recogerá el número personal del DNI y carácter de verificación correspondiente al número de Identificación Fiscal. Para verificar el NIF de españoles residentes mayores de edad, el algoritmo de cálculo del dígito de control es el siguiente:
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:
RESTO | 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 |
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 NIE's de extranjeros residentes en España tienen una letra (X, Y, Z), 7 números y dígito de control. Para el cálculo del dígito de control se sustituye (y se aplica el mismo algoritmo que para el NIF ):
X → 0
Y → 1
Z → 2
Paquete | Versión |
---|---|
attrs | 22.2.0 |
exceptiongroup | 1.1.0 |
iniconfig | 1.1.1 |
packaging | 22.0 |
pluggy | 1.0.0 |
pytest | 7.2.0 |
tomli | 2.0.1 |
Crea el directorio donde vas a clonar el repositorio y clonalo usando el siguiente comando:
$ mkdir ./CalculadoraDNI
$ cd CalculadoraDNI
$ git clone https://github.com/Aminmboankod/SOLID-DNI-Kata-SRP-OCP.git
Ejecuta el archivo de configuración:
$ ./setup.sh
El siguiente programa se puede implementar en cualquier software que esté escrito en python. Pensado para comprobar formularios donde se introduzcan números de identificación fiscal.
Utiliza DNI.dniCompleto("args") donde args sería el NIF incompleto al que quieres calcularle la letra.
También puedes usar cualquiera de los métodos de obtención de datos del DNI como DNI.dividirDigito() para obtener solo el dígito control introducido y DNI.verificaDigito() para comprobar si es un dígito control correcto.
Tenemos un DNI que necesita de una tabla de asignación para establecer correctamente un digito control para asociarlo al número de identificación fiscal (NIF).
El DNI va a contener el NIF, el Digito control y otros datos personales del propietario. Ejemplo: 45301872Z
NIF | D. Control |
---|---|
45301872 | Z |
- logic/
- calculadoraDNI.py
- accesoDatos/
- Dni.py