Generadores universales, sin país
Lo que no depende de una legislación concreta: cuentas IBAN con control módulo 97, pasaportes con zona de lectura mecánica e identificadores técnicos.
Banca y documentos de viaje
IBAN con control módulo 97 y pasaportes con zona de lectura mecánica.
Identificadores técnicos
Lo que genera tu propio sistema, no un registro público.
Contacto
Correos con el dominio que necesites.
100 % privado. No hay servidor: los datos se generan en tu navegador y no se envían ni se guardan en ninguna parte.
Identificadores que valen en cualquier sitio
Estos generadores no dependen de la legislación de ningún país: un UUID es un UUID en Lima y en Milán, y el control de un IBAN se calcula igual para las once nacionalidades que incluimos.
- UUID v4 con
crypto.getRandomValues, no conMath.random, y v1 con marca de tiempo real, útil para probar ordenaciones. - JWT con el payload que escribas, firma correcta o deliberadamente rota, y fechas
iatyexpautomáticas. La clave nunca sale de tu navegador. - IBAN de once países con el control ISO 7064 módulo 97 y la longitud exacta de cada uno, verificado con el ejemplo canónico de la norma.
- Pasaporte con MRZ: las dos líneas TD3 de 44 caracteres con sus cuatro dígitos de control, para probar lectores de documentos.
- MAC con bit local o de fabricante, e IMEI con verificador de Luhn.
- Correos con el dominio que quieras, o con dominios de prueba variados.
El IBAN es el caso más rentable de probar
Cada país tiene una longitud distinta —16 caracteres en Bélgica, 29 en Brasil— y muchas validaciones asumen la del país propio. Genera IBAN de varios países seguidos y comprueba que tu formulario los acepta todos: es un fallo muy habitual en aplicaciones que crecen a más mercados.
La longitud del IBAN, país por país
Aquí está el fallo que más se repite: asumir la longitud del país propio. Un formulario español que fija 24 caracteres rechaza a cualquier cliente belga, cuyo IBAN tiene 16. Estas son las once nacionalidades que genera la herramienta, con su longitud exacta:
| País | Código | Caracteres | Estructura del número de cuenta |
|---|---|---|---|
| Bélgica | BE | 16 | 12 dígitos |
| Países Bajos | NL | 18 | 4 letras de banco + 10 dígitos |
| Austria | AT | 20 | 16 dígitos |
| Suiza | CH | 21 | 5 dígitos + 12 alfanuméricos |
| Alemania | DE | 22 | 18 dígitos |
| Reino Unido | GB | 22 | 4 letras + 14 dígitos |
| España | ES | 24 | 20 dígitos |
| Portugal | PT | 25 | 21 dígitos |
| Francia | FR | 27 | 10 dígitos + 11 alfanuméricos + 2 dígitos |
| Italia | IT | 27 | 1 letra de control + 22 dígitos |
| Brasil | BR | 29 | 23 dígitos + 1 letra + 1 alfanumérico |
Observa que varios países admiten letras dentro del número de cuenta. Si tu campo solo acepta dígitos tras el código de país, has excluido a Reino Unido, Países Bajos, Francia, Suiza, Italia y Brasil de golpe.
Validar cualquier IBAN con siete líneas
La norma ISO 7064 MOD 97-10 es elegante: se mueven los cuatro primeros caracteres al final,
cada letra se convierte en dos dígitos (A = 10, Z = 35) y el número
resultante tiene que dar resto 1 al dividirlo entre 97. Vale para los más de
setenta países del registro, sin tabla de longitudes:
function ibanValido(iban) {
const s = iban.replace(/\s+/g, "").toUpperCase();
if (!/^[A-Z]{2}\d{2}[A-Z0-9]{10,30}$/.test(s)) return false;
const movido = s.slice(4) + s.slice(0, 4);
let resto = 0;
for (const ch of movido) {
const v = /\d/.test(ch) ? ch : String(ch.charCodeAt(0) - 55);
for (const d of v) resto = (resto * 10 + Number(d)) % 97;
}
return resto === 1;
}
El truco del resto acumulado evita trabajar con números de treinta dígitos, que en JavaScript
perderían precisión. Compruébalo con GB82WEST12345698765432, el ejemplo canónico
de la norma.
La zona MRZ de un pasaporte, campo por campo
Las dos líneas de 44 caracteres del formato TD3 de la OACI son lo que lee un escáner de pasaportes. La segunda línea es la que lleva los datos comprobables:
| Posición | Campo | Longitud |
|---|---|---|
| 1–9 | Número de pasaporte | 9 |
| 10 | Dígito de control del número | 1 |
| 11–13 | Nacionalidad (código de 3 letras) | 3 |
| 14–19 | Fecha de nacimiento (AAMMDD) | 6 |
| 20 | Dígito de control de la fecha | 1 |
| 21 | Sexo (M, F o <) | 1 |
| 22–27 | Fecha de caducidad (AAMMDD) | 6 |
| 28 | Dígito de control de la caducidad | 1 |
| 29–42 | Número personal u datos opcionales | 14 |
| 43 | Dígito de control del número personal | 1 |
| 44 | Dígito de control compuesto | 1 |
Los cinco dígitos de control usan los pesos 7-3-1 repetidos, donde el relleno
< vale cero. El compuesto de la posición 44 se calcula sobre los caracteres
1–10, 14–20 y 22–43 juntos: es el que detecta si alguien manipuló un campo suelto. La
herramienta permite generar la MRZ con ese dígito roto a propósito, que es la prueba negativa
que necesita cualquier lector de documentos.
UUID: v4 no es lo mismo que v1
El v4 es aleatorio y no dice nada de sí mismo: es el que quieres para
identificadores públicos, porque no filtra ni cuándo se creó ni en qué máquina. El
v1 lleva la marca de tiempo y la dirección MAC del equipo, así que ordena
cronológicamente —útil para claves de base de datos— pero revela información.
Genera de los dos tipos si tu sistema los distingue: el carácter de la posición 15 vale
1 o 4 según la versión, y hay validadores que lo comprueban.
Preguntas frecuentes
Sobre estos generadores
¿Los IBAN son cuentas reales?
No. El control módulo 97 es correcto, así que cualquier validador los acepta, pero no corresponden a ninguna cuenta abierta en ningún banco.
¿La clave de mi JWT se envía a algún sitio?
No. La firma se calcula en tu navegador con la API de criptografía del propio navegador. No hay servidor al que enviarla.
¿Los UUID son criptográficamente aleatorios?
Sí, usan crypto.getRandomValues. La probabilidad de colisión es la misma que en cualquier implementación seria de la versión 4.