# Algoritmia/Algoritmo para obtener la letra del NIF

El número de identificación fiscal (NIF) español es un código único que identifica a todos los ciudadanos españoles a efectos fiscales. Partiendo del tradicional documento nacional de identidad, DNI, añade a éste una letra que actúa como elemento verificador.

## Algoritmo

La letra del NIF se obtiene a partir de un algoritmo conocido como módulo 23. El algoritmo consiste en aplicar la operación aritmética de módulo 23 al número del DNI. El módulo 23 es el número entero obtenido como resto de la división entera del número del DNI entre 23. El resultado es un número comprendido entre el 0 y el 22. En base a una tabla conocida se asigna una letra. La combinación del DNI con esa letra es el NIF.
Este mismo algoritmo también puede utilizarse para el cálculo del NIE. En el caso que el NIE empiece por X, se calcula despreciando la X y utilizando los 7 dígitos, si el NIE empieza por Y, se sustituye la letra Y por el número 1, si el NIE empieza por Z, se sustituye la letra Z por el número 2 y se realiza el mismo cálculo.
El algoritmo no se aplica para obtener el Código de Identificación Fiscal (CIF), que es el "NIF" propio de las personas jurídicas, pues la letra que tiene no se basa en una fórmula, sino que identifica el tipo de entidad (p.e. B para Sociedades Limitadas; G para Asociaciones sin ánimo de lucro y otros tipos no definidos, etc.).

## Tabla de asignación

No se utilizan las letras: I, Ñ, O, U
La I y la O se descartan para evitar confusiones con otros caracteres, como 1, l o 0.
Se usan veintitrés letras por ser éste un número primo.

## Ejemplos

Algunos ejemplos de la implementación de este algoritmo para distintos lenguajes de programación son:

### Ada

Éste es el código fuente en Ada para calcular la letra del NIF.

### Matlab

Éste es el código fuente en Matlab para calcular la letra del NIF.

### AppleScript

Código fuente del cálculo de la Letra del NIF en AppleScript

### ASP 3.0 VBScript

Y para Validar el NIF:

### Bourne shell script

otra forma sin utilizar las órdenes externas (echo y cut)

### VC++ 2008
### C#

Corrección comprobada con datos reales:
* El DNI esta compuesto de 9 caracteres 8 dígitos+Letra.
* El NIE esta compuesto de 9 caracteres Letra+7digitos+Letra, debe tenerse esto encuenta al realizar las validaciones de tamaño.
En las comparaciones longitud y conversión a entero, debe poner (nie.Length != 9) y (!int.TryParse(nie.Substring(1,7), out n) o jamas aceptara un NIE real como valido.

### C# (versión mejorada con expresiones regulares)

Versión mejorada que usa expresiones regulares para comprobar que el DNI está compuesto por 8 dígitos y que el nie está compuesto por el caracter 'X', 'Y' o 'Z' (independientemente de que sea en mayúsculas o minúsculas) seguido de 7 dígitos.

### JavaScript

Ejecutable en navegador:

### Excel

Siendo A1 la celda de origen del DNI sin letra.

### PL-SQL

en sentencias SELECT:
o más simple para ORACLE:
siendo tablaPersonas la tabla con el dato de usuario y el campo dni el origen del DNI y en formato entero (int).

### SAP

Siendo gv_result el nº de nif con la letra.

### PL/1

Previamente hay que declarar en el programa que se importa la función del sistema para hallar restos:

## Enlaces externos

* Obtén la letra de un DNI
* Calcula la Letra del DNI o NIF
* Página 'DNIe' de Glosario de Tecnología.
* Letra del NIF en Excel
* Generador de DNI