Los UUID explicados: v4, v7 y cómo elegir la versión adecuada
Un UUID es un identificador de 128 bits que cualquier ordenador puede crear por su cuenta, sin un contador central, y aun así tener la certeza práctica de que nadie más ha creado el mismo. Por eso acaban usándose como claves de bases de datos, nombres de archivo, identificadores de solicitudes y números de pedido. La mayoría de los UUID que ves son de la versión 4, que es puro azar; la versión 7, estandarizada en 2024, añade el momento de creación y se está convirtiendo rápidamente en la mejor opción para bases de datos. Esta guía explica cómo leer uno, en qué se diferencian las versiones, qué probabilidad real hay de una colisión y cuál elegir.
Qué aspecto tiene un UUID
Un UUID tiene 128 bits y se escribe como 32 dígitos hexadecimales repartidos en cinco grupos separados por guiones —de 8, 4, 4, 4 y 12 dígitos—, 36 caracteres en total:
3f2a9c1e-5b7d-4e8a-9c21-7d4e5f6a8b90Un UUID de la versión 4.01a0d86f-ca00-7b3e-9f21-6c4d8a0e5b17Un UUID de la versión 7.
El estándar actual es el RFC 9562, publicado en mayo de 2024, que sustituyó al RFC 4122 de 2005. Las letras pueden escribirse en mayúsculas, en minúsculas o mezclando ambas; las tres formas representan el mismo valor.
Las bases de datos con un tipo UUID nativo, como PostgreSQL, guardan el valor en 16 bytes en lugar de como 36 caracteres de texto.
Cómo leer la versión
Dos dígitos indican qué tipo de UUID tienes. El primer dígito del tercer grupo es la versión. El primer dígito del cuarto grupo es la variante: en todo UUID generado conforme al estándar es 8, 9, a o b.
| UUID | Versión | Qué es |
|---|---|---|
3f2a9c1e-5b7d-4e8a-9c21-7d4e5f6a8b90 | 4 | Aleatorio |
01a0d86f-ca00-7b3e-9f21-6c4d8a0e5b17 | 7 | Ordenado por tiempo, creado el 25 de septiembre de 2026 a las 12:00:00 UTC |
00000000-0000-0000-0000-000000000000 | — | El Nil UUID: todos los bits a cero; se usa para indicar «sin valor» |
ffffffff-ffff-ffff-ffff-ffffffffffff | — | El Max UUID: todos los bits a uno; se usa como límite superior |
Las versiones
| Versión | Cómo se genera | Uso actual |
|---|---|---|
| 1 | Marca de tiempo y dirección de red (MAC) del ordenador | Heredado; revela qué máquina lo generó |
| 3 | Hash MD5 de un espacio de nombres y un nombre | Solo para reproducir identificadores existentes; mejor la versión 5 |
| 4 | 122 bits aleatorios | La opción por defecto casi en todas partes |
| 5 | Hash SHA-1 de un espacio de nombres y un nombre | El mismo nombre siempre da el mismo UUID |
| 6 | La versión 1 reordenada para que se ordene por tiempo | Solo donde ya se usa la versión 1 |
| 7 | Marca de tiempo Unix en milisegundos más bits aleatorios | Bases de datos nuevas y todo lo que se beneficie del orden temporal |
| 8 | Estructura definida por la aplicación | Formatos experimentales o propios de un fabricante |
La versión 2 existe para un antiguo sistema de seguridad y queda fuera del alcance del estándar. El RFC 9562 indica que las implementaciones deberían usar la versión 7 en lugar de las versiones 1 y 6 siempre que sea posible.
Versión 4: aleatoria
Un UUID de la versión 4 fija 6 de sus 128 bits para marcar la versión y la variante, y rellena los otros 122 con datos aleatorios. El estándar pide un generador de números aleatorios criptográficamente seguro, que es lo que ofrecen los navegadores mediante crypto.randomUUID(), la función que usa el generador de nTools.
Con 122 bits aleatorios, una colisión no es un problema práctico. La probabilidad de que dos cualesquiera coincidan no llega al 50% hasta unos 2,7 × 10¹⁸ UUID; a mil millones por segundo, eso lleva unos 86 años. Tras un billón de UUID, la probabilidad de que dos cualesquiera sean iguales es de aproximadamente 1 entre 10 billones. El riesgo realista es un generador de números aleatorios defectuoso, no las matemáticas.
Versión 7: ordenada por tiempo
Un UUID de la versión 7 coloca el tiempo Unix en milisegundos en sus primeros 48 bits, después la versión y la variante, y después 74 bits aleatorios o de un contador. Como el tiempo va primero, los UUID creados más tarde se ordenan después de los anteriores, tanto en forma de texto como de bytes.
En el ejemplo anterior, los primeros 12 dígitos hexadecimales, 01a0d86fca00, equivalen a 1.790.337.600.000 milisegundos después del 1 de enero de 1970: el 25 de septiembre de 2026 a las 12:00:00 UTC. La marca de tiempo de 48 bits alcanza hasta el año 10889. Dentro de un mismo milisegundo, los generadores o bien usan bits aleatorios, o bien añaden un contador para que los UUID de un mismo proceso sigan saliendo en orden.
El soporte está llegando a las herramientas de uso habitual: PostgreSQL 18, publicado en septiembre de 2025, añadió una función uuidv7() integrada junto a uuidv4().
Cuál usar como clave de base de datos
La mayoría de las bases de datos guardan las claves primarias en un índice B-tree (árbol B), que sigue siendo eficiente cuando las claves nuevas llegan en orden.
- Las claves de la versión 4 caen en posiciones aleatorias del índice. En tablas pequeñas eso no importa; en las grandes, cada inserción toca una parte distinta del índice, lo que supone más divisiones de página, más fallos de caché e índices más grandes.
- Las claves de la versión 7 llegan en orden temporal, así que las filas nuevas se añaden cerca del final del índice, de forma muy parecida a un número autoincremental, y aun así pueden crearse en cualquier lugar, sin pedir a la base de datos el siguiente valor.
- Los enteros autoincrementales son más pequeños y más rápidos, pero necesitan un único contador central y revelan cuántos registros existen y en qué orden se crearon.
Para una tabla nueva que necesite UUID, la versión 7 suele ser la mejor opción. La versión 4 sigue siendo la adecuada cuando la hora de creación no debe poder verse en el identificador.
Lo que un UUID no es
- No es un secreto. Un UUID de la versión 7 muestra cuándo se creó, al milisegundo, a cualquiera que lo lea. Un UUID de la versión 4 es difícil de adivinar, pero los identificadores acaban en los logs, se comparten en URL y se muestran en interfaces. Los enlaces para restablecer contraseñas o acceder a archivos privados deberían usar un token aleatorio dedicado, no el identificador del registro.
- No es una fuente de información. El estándar recomienda tratar los UUID como valores opacos: guárdalos y compáralos, pero no construyas lógica que dependa de leer sus partes.
- No siempre es de la versión 4. El código que espera aleatoriedad no debería darla por supuesta; comprueba el dígito de versión cuando importe.
Preguntas frecuentes
¿Pueden coincidir alguna vez dos UUID aleatorios?
En teoría, sí; en la práctica, no. Harían falta unos 2,7 × 10¹⁸ UUID de la versión 4 para tener un 50% de probabilidad de una sola coincidencia, siempre que procedan de un generador de números aleatorios adecuado.
¿Un GUID es lo mismo que un UUID?
Sí. GUID es el nombre que da Microsoft al mismo identificador de 128 bits. Las herramientas de Windows suelen mostrarlo en mayúsculas o entre llaves, como {3F2A9C1E-5B7D-4E8A-9C21-7D4E5F6A8B90}, pero el valor es el mismo.
¿Los UUID distinguen entre mayúsculas y minúsculas?
No. 3F2A9C1E-… y 3f2a9c1e-… son el mismo UUID. Compáralos sin distinguir mayúsculas de minúsculas, o guárdalos en una columna de tipo UUID nativo, lo que evita la cuestión.
¿Qué versión crea el generador de nTools?
La versión 4, mediante crypto.randomUUID() del navegador. Crea hasta 100 a la vez, íntegramente en tu dispositivo.
Guías relacionadas
- Direcciones IP explicadas: IPv4, IPv6 y los rangos reservados
- Registros DNS explicados: A, AAAA, CNAME, MX, TXT y NS
- Subredes y CIDR explicados: prefijos, máscaras y hosts utilizables
- Marcas de tiempo Unix y zonas horarias explicadas
- Formatos de imagen explicados: JPEG, PNG, WebP, AVIF y HEIC
- Fortaleza de las contraseñas explicada: longitud, entropía y frases de contraseña
- Los códigos QR explicados: capacidad, corrección de errores y tamaño de impresión
- Porcentajes e IVA explicados: añadir, quitar y encadenar