Qué es un UUID
Un UUID (Universally Unique Identifier, también llamado GUID en el mundo Microsoft) es un identificador de 128 bits pensado para que cualquier sistema pueda generarlo por su cuenta, sin consultar a un servidor central ni a una base de datos, con una probabilidad prácticamente nula de repetir uno ya existente. Se escribe como 32 dígitos hexadecimales agrupados en cinco bloques de 8, 4, 4, 4 y 12 caracteres:
017f22e2-79b0-7cc3-98c4-dc0c0c07398f
↑ ↑
versión variante
El formato lo define el RFC 9562, publicado en 2024, que reemplazó al RFC 4122 de 2005 y agregó las versiones 6, 7 y 8. Dos posiciones son fijas en cualquier UUID estándar: el primer dígito del tercer bloque indica la versión (cómo se generó) y el primer dígito del cuarto bloque, la variante (que en los UUID actuales siempre es 8, 9, a o b).
Las versiones
| Versión | Cómo se genera | Uso actual |
|---|---|---|
| 1 | Timestamp de 60 bits + dirección MAC del equipo | Heredado; expone la MAC y el momento de creación |
| 3 | Hash MD5 de un espacio de nombres + un nombre | Identificadores deterministas, desaconsejado frente a v5 |
| 4 | 122 bits aleatorios | El más usado: identificadores sin información |
| 5 | Hash SHA-1 de un espacio de nombres + un nombre | Mismo nombre → mismo UUID, siempre |
| 6 | Como v1, con el timestamp reordenado para que sea ordenable | Migraciones desde v1 |
| 7 | Timestamp Unix en milisegundos + 74 bits aleatorios | Claves primarias en bases de datos |
| 8 | Formato libre, definido por cada aplicación | Casos especiales |
Esta herramienta genera las dos versiones que conviene usar hoy en casi cualquier proyecto: v4 cuando solo hace falta un identificador único y v7 cuando además conviene que los identificadores queden ordenados por fecha de creación. La comparación detallada, con el impacto en los índices de bases de datos y lo que cada una revela, está en la guía UUID v4 vs v7: cuál usar y por qué importa en la base de datos.
Cómo usar la herramienta
- Generar: elige la versión y la cantidad (hasta 100 por lote) y copia todos los UUID con un clic. Las opciones de mayúsculas y sin guiones sirven para sistemas que esperan otro formato; el valor es el mismo.
- v7 en lote: dentro de un mismo milisegundo, los 12 bits que siguen al timestamp funcionan como contador, tal como permite el RFC 9562, así que un lote generado de una vez sale ya ordenado.
- Inspeccionar: pega cualquier UUID, con o sin guiones, entre llaves o con el prefijo
urn:uuid:, y la herramienta muestra su forma canónica, su versión, su variante y, en las versiones 1, 6 y 7, la fecha y hora en que fue creado.
¿Se pueden repetir?
Un UUID v4 tiene 122 bits aleatorios, es decir, unos 5,3 × 10³⁶ valores posibles. Por la paradoja del cumpleaños, la probabilidad de que aparezca al menos una colisión crece con el cuadrado de la cantidad generada, pero parte de un número tan grande que en la práctica no es un riesgo:
| UUID v4 generados | Probabilidad de al menos una colisión |
|---|---|
| mil millones (10⁹) | ≈ 1 en 10¹⁹ |
| un billón (10¹²) | ≈ 1 en 10¹³ |
| mil billones (10¹⁵) | ≈ 1 en 10 millones |
| 2,7 × 10¹⁸ | ≈ 50 % |
Para llegar a una probabilidad del 50 % habría que generar mil millones de UUID por segundo durante unos 86 años. El riesgo real no es matemático sino de implementación: un generador que no usa una fuente criptográfica (como Math.random()) o una máquina virtual clonada con el mismo estado del generador. Esta herramienta usa crypto.getRandomValues() del navegador.
UUID en bases de datos
Guardar un UUID como texto (CHAR(36)) ocupa 36 bytes por fila más los índices; como binario ocupa 16. Los motores más usados tienen soporte directo:
| Motor | Tipo recomendado | Generación en el servidor |
|---|---|---|
| PostgreSQL | uuid (16 bytes) | gen_random_uuid() (v4); uuidv7() desde PostgreSQL 18 |
| MySQL | BINARY(16) | UUID() genera v1; UUID_TO_BIN() y BIN_TO_UUID() convierten |
| SQL Server | uniqueidentifier | NEWID() (aleatorio), NEWSEQUENTIALID() (secuencial) |
| SQLite | BLOB de 16 bytes o TEXT | Sin función nativa: se genera en la aplicación |
En la aplicación, crypto.randomUUID() (navegadores y Node.js) y uuid.uuid4() (Python) generan v4. Para v7, Python lo incluye a partir de la versión 3.14 (uuid.uuid7()), y en otros lenguajes suele hacer falta una librería.
Un UUID no es una contraseña
Aunque un UUID v4 bien generado es muy difícil de adivinar, el RFC 9562 advierte expresamente que no hay que asumir que los UUID sean secretos. Muchas implementaciones no usan una fuente criptográfica, los v1 y v7 son en buena parte predecibles, y los identificadores suelen terminar en URLs, logs y respuestas de API. Para enlaces de restablecimiento de contraseña, tokens de sesión o claves de API, lo correcto es un token aleatorio dedicado, generado con el mismo cuidado que una contraseña.
Privacidad
Los UUID se generan en el navegador con la API criptográfica del propio dispositivo y nunca se envían a un servidor. Tampoco se generan durante la construcción del sitio: cada visita obtiene valores nuevos.