Si desarrollas software para el mercado español, tarde o temprano necesitas validar documentos fiscales: NIF, CIF o NIE. Aquí explico cómo funciona el algoritmo oficial y cómo implementarlo.
El algoritmo del NIF (y DNI)
El NIF de persona física son 8 dígitos + 1 letra de control. La letra se calcula así:
- Toma los 8 dígitos
- Divide entre 23
- El resto (0-22) selecciona una letra de esta cadena:
TRWAGMYFPDXBNJZSQVHLCKE
function validateNIF(nif) {
const letters = 'TRWAGMYFPDXBNJZSQVHLCKE';
const cleaned = nif.toUpperCase().trim();
const num = parseInt(cleaned.slice(0, 8), 10);
const letter = cleaned.slice(-1);
return letters[num % 23] === letter;
}
El algoritmo del NIE
El NIE empieza por X, Y o Z. Se sustituye por 0, 1 o 2 respectivamente, y se aplica el mismo algoritmo que el NIF.
function validateNIE(nie) {
const letters = 'TRWAGMYFPDXBNJZSQVHLCKE';
const cleaned = nie.toUpperCase().trim();
const first = { X: '0', Y: '1', Z: '2' }[cleaned[0]];
if (!first) return false;
const num = parseInt(first + cleaned.slice(1, 8), 10);
return letters[num % 23] === cleaned.slice(-1);
}
El algoritmo del CIF (empresas)
El CIF es más complejo: letra de tipo + 7 dígitos + carácter de control.
function validateCIF(cif) {
const cleaned = cif.toUpperCase().trim();
const validLetters = 'ABCDEFGHJKLMNPQRSUVW';
if (!validLetters.includes(cleaned[0])) return false;
const digits = cleaned.slice(1, 8);
let oddSum = 0, evenSum = 0;
for (let i = 0; i < 7; i++) {
const d = parseInt(digits[i], 10);
if (i % 2 === 0) {
const doubled = d * 2;
oddSum += doubled > 9 ? doubled - 9 : doubled;
} else {
evenSum += d;
}
}
const total = oddSum + evenSum;
const control = (10 - (total % 10)) % 10;
const lastChar = cleaned.slice(-1);
const controlLetters = 'JABCDEFGHI';
return lastChar === String(control) || lastChar === controlLetters[control];
}
Casos de uso habituales
- Tests automatizados: generar datos válidos para Jest, Vitest, Cypress
- Seeding de bases de datos: poblar entornos de desarrollo sin usar datos reales
- Validación de formularios: verificar que el campo NIF funciona en producción
Si no quieres implementarlo tú mismo, hay herramientas online que validan y generan NIF, CIF y NIE aleatorios válidos para pruebas, como este validador y generador gratuito.
Conclusión
El algoritmo es sencillo pero tiene sus matices, especialmente en el CIF. Implementarlo bien y testearlo te ahorra sorpresas en producción con datos reales.
Top comments (0)