¿Qué es un UUID? Formato, versiones y UUID vs GUID

Un UUID (identificador único universal, del inglés universally unique identifier) es un número de 128 bits que sirve para identificar datos sin pedir a un servidor central el siguiente ID libre. Se suele escribir con 36 caracteres: 32 dígitos hexadecimales en cinco grupos de 8-4-4-4-12, como f47ac10b-58cc-4372-a567-0e02b2c3d479. El formato lo define el RFC 9562 (mayo de 2024), que sustituyó al RFC 4122.

Pruébalo gratis: Generador de UUID Gratis y sin necesidad de cuenta.

¿Qué es un UUID en la práctica y para qué sirve? Cualquier sistema puede crear uno por su cuenta, sin conexión, y estar prácticamente seguro de que nadie más generará jamás el mismo valor. Por eso los UUID son habituales como claves de bases de datos, nombres de archivo, IDs de peticiones y de mensajes. Esta guía explica el formato, las versiones, la probabilidad real de colisión, la diferencia entre UUID y GUID y cómo elegir entre v4 y v7. Para probar los ejemplos, abre el generador de UUID gratuito en otra pestaña.

¿Qué es un UUID por dentro? El formato 8-4-4-4-12

Los 128 bits son 16 bytes. Cada byte son dos dígitos hexadecimales, lo que da 32 dígitos, y cuatro guiones llevan la forma de texto a 36 caracteres. Dos posiciones tienen un significado fijo:

f47ac10b-58cc-4372-a567-0e02b2c3d479
              ^    ^
              |    +-- dígito 17 "a": variante (8, 9, a o b = RFC 9562)
              +------- dígito 13 "4": versión 4 (aleatoria)

Como esos 6 bits son fijos, un UUID aleatorio de versión 4 tiene 128 − 6 = 122 bits aleatorios. Las letras hexadecimales pueden ir en mayúsculas, minúsculas o mezcladas, de modo que F47AC10B-… y f47ac10b-… son el mismo UUID; lo más habitual es usar minúsculas.

Versiones de UUID: de v1 a v8, nil y max

El RFC 9562 define ocho versiones y dos valores especiales:

Versión Cómo se construye Uso típico
v1 Marca de tiempo de 60 bits (pasos de 100 ns desde 1582) + secuencia de reloj + ID de nodo, tradicionalmente la dirección MAC Sistemas antiguos
v2 DCE Security, no detallada en el RFC Casi no se usa
v3 Hash MD5 de un UUID de espacio de nombres y un nombre IDs reproducibles (mejor v5)
v4 122 bits aleatorios Opción general por defecto
v5 Hash SHA-1 de un UUID de espacio de nombres y un nombre IDs reproducibles a partir de nombres
v6 Los campos de v1, reordenados para que la marca de tiempo se pueda ordenar Migrar sistemas v1
v7 Marca de tiempo Unix de 48 bits en milisegundos + bits aleatorios Claves de bases de datos, IDs ordenables
v8 Formato propio; solo la versión y la variante son fijas Formatos específicos de un proveedor
Nil 00000000-0000-0000-0000-000000000000 Marcador de «sin valor»
Max ffffffff-ffff-ffff-ffff-ffffffffffff Valor centinela o límite superior

Las versiones basadas en nombres son deterministas. El espacio de nombres DNS con el nombre example.com da siempre el UUID v5 cfbff0d1-9375-5685-968c-48ce8b15ae17, en cualquier equipo y en cualquier lenguaje. Úsalas cuando la misma entrada deba corresponder siempre al mismo ID.

Un UUID de versión 7 pone el tiempo al principio. Este ejemplo se creó el 24/09/2026 a las 12:00:00 UTC, es decir, 1.790.251.200.000 milisegundos después de la época Unix, o 0x01a0d3496e00 en hexadecimal:

01a0d349-6e00-7c3f-9d21-4b6e8a1f0c57
^^^^^^^^^^^^^ ^    ^
|             |    +-- dígito de variante "9"
|             +------- versión 7
+--------------------- marca de tiempo de 48 bits en ms

Los 74 bits restantes son aleatorios (o en parte un contador, según la biblioteca).

¿Los UUID son únicos? Probabilidad de colisión en v4

Los UUID no tienen unicidad garantizada: son únicos con una probabilidad abrumadora. Con 122 bits aleatorios hay 2^122 ≈ 5,3 × 10^36 valores v4 posibles. La aproximación del problema del cumpleaños da el número n de UUID necesario para tener un 50 % de probabilidad de que al menos dos coincidan:

n ≈ √(2 · ln 2 · 2^122) ≈ 2,71 × 10^18

Son 2,71 trillones de UUID. Generando mil millones por segundo, tardarías unos 86 años en llegar a esa cifra. Con volúmenes realistas el riesgo es despreciable:

UUID v4 generados Probabilidad de alguna colisión
Mil millones (10^9) aprox. 9,4 × 10^-20
Un billón (10^12) aprox. 9,4 × 10^-14
103 billones (1,03 × 10^14) aprox. 1 entre mil millones
2,71 × 10^18 aprox. 50 %

Estas cifras suponen un buen generador de números aleatorios. En la práctica, las colisiones vienen de errores: un generador mal inicializado, máquinas virtuales clonadas que reutilizan el mismo estado o código que copia un ID en lugar de crear uno nuevo. Aun así, conviene tener una restricción de unicidad en la base de datos.

UUID vs GUID: ¿cuál es la diferencia?

En la práctica, ninguna. GUID (identificador único global) es el nombre que Microsoft da al mismo valor de 128 bits, y se usa en Windows, COM, .NET y SQL Server. Por ejemplo, Guid.NewGuid() de .NET crea un UUID normal de versión 4. Las diferencias están en la presentación y el almacenamiento:

Texto:           f47ac10b-58cc-4372-a567-0e02b2c3d479
Orden RFC:       f4 7a c1 0b | 58 cc | 43 72 | a5 67 0e 02 b2 c3 d4 79
Orden Microsoft: 0b c1 7a f4 | cc 58 | 72 43 | a5 67 0e 02 b2 c3 d4 79

El texto es idéntico; solo cambian los 16 bytes en bruto. Si copias GUID en binario entre un sistema de Microsoft y otro que espera el orden RFC, el valor sale desordenado. Convierte a través del texto o, desde .NET 8, usa ToByteArray(bigEndian: true). Microsoft documenta los grupos invertidos en la referencia de Guid.ToByteArray.

Así que «UUID vs GUID» es una cuestión de nombre, no una decisión que tengas que tomar.

UUID v4 vs v7 como clave primaria

Los dos son UUID de 128 bits, pero se comportan de forma muy distinta dentro de un índice.

Con v7 también puedes ordenar por ID para obtener el orden de creación y leer la hora de creación en el propio ID. Esa es también su desventaja: quien vea un ID v7 sabe cuándo se creó el registro, al milisegundo. Usa v4 para identificadores públicos cuya fecha deba ser privada, y v7 para claves internas en tablas grandes con muchas escrituras.

Cómo almacenar UUID de forma eficiente

Guarda los 16 bytes, no el texto de 36 caracteres. Una columna de texto ocupa al menos 36 bytes por valor, más del doble, y cada índice que incluya la clave crece con ella.

Convierte a texto solo en los extremos del sistema, como las API y los logs.

Cómo generar un UUID en código

La mayoría de los lenguajes incluyen un generador:

import uuid
uuid.uuid4()                                   # random v4
uuid.uuid7()                                   # v7, Python 3.14+
uuid.uuid5(uuid.NAMESPACE_DNS, "example.com")  # cfbff0d1-9375-5685-968c-48ce8b15ae17
crypto.randomUUID(); // v4, in browsers (HTTPS pages) and Node.js
SELECT gen_random_uuid();  -- v4, built in since PostgreSQL 13
SELECT uuidv7();           -- v7, PostgreSQL 18+
Guid.NewGuid();         // v4
Guid.CreateVersion7();  // v7, .NET 9+

crypto.randomUUID() está documentado en MDN. En el navegador solo funciona en páginas seguras (HTTPS).

Cómo validar un UUID con una expresión regular

Este patrón acepta la forma canónica de las versiones 1 a 8 con la variante estándar (usa una comparación sin distinguir mayúsculas):

^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$

[1-8] comprueba el dígito de versión y [89ab] la variante. Añade comprobaciones aparte si también quieres aceptar los UUID nil y max, las llaves o el prefijo urn:uuid:.

Los UUID no son secretos

Un UUID identifica algo; no lo protege. El RFC 9562 indica que las implementaciones no deben suponer que los UUID son difíciles de adivinar y que no deben usarse como mecanismo de seguridad. v1 revela la hora de creación y, tradicionalmente, la dirección MAC del equipo que lo generó; v7 revela la hora de creación. Ni siquiera un v4 de un generador seguro está pensado como token de restablecimiento de contraseña o clave de API. Para eso, usa un token aleatorio específico, por ejemplo del generador de tokens, y comprueba igualmente los permisos en cada petición.

Alternativas al UUID

ULID es una alternativa popular con objetivos similares: 128 bits, una marca de tiempo de 48 bits en milisegundos y 80 bits aleatorios, escritos como 26 caracteres en Base32 de Crockford para que se ordenen como texto. Si necesitas ese formato, el generador de ULID crea y decodifica ULID y los convierte a UUID. Para proyectos nuevos, UUID v7 ofrece el mismo orden temporal manteniendo el formato UUID estándar que las bases de datos entienden de forma nativa.

Generar e inspeccionar UUID en línea

El generador de UUID gratuito funciona por completo en tu navegador. Crea UUID v1, v3, v4, v5 y v7, además de los valores nil y max, hasta 500 a la vez. Puedes elegir minúsculas, mayúsculas o llaves, quitar los guiones y separar la lista por líneas, comas, espacios o como array JSON, y luego copiarla o descargarla como .txt o .json. Para v3 y v5, elige el espacio de nombres DNS, URL, OID o X.500, o pega el tuyo.

El validador integrado acepta entradas canónicas, entre llaves, con urn:uuid: y sin guiones, y muestra la versión, la variante y la forma canónica. Decodifica la marca de tiempo de los UUID v1 y v7, y la secuencia de reloj y el nodo de v1. Algunos límites: no genera v6 ni v8, su v1 usa un nodo aleatorio en lugar de tu dirección MAC, y los IDs v7 creados en el mismo milisegundo no tienen garantizado el orden de creación, porque los bits posteriores a la marca de tiempo son aleatorios y no un contador.

Preguntas frecuentes

¿Un UUID es lo mismo que un GUID?

Sí. GUID es el nombre que Microsoft da a un UUID. El valor y el formato de texto son los mismos; las herramientas de Microsoft suelen mostrar los GUID en mayúsculas y entre llaves, y algunas API de Microsoft guardan en binario los tres primeros campos en orden little-endian.

¿Pueden coincidir dos UUID?

En teoría sí; en la práctica, casi nunca. Con v4 harían falta unos 2,71 × 10^18 UUID para tener un 50 % de probabilidad de un duplicado. Los duplicados reales suelen deberse a errores de software o a un generador aleatorio defectuoso, así que mantén una restricción de unicidad en las columnas clave.

¿Uso UUID v4 o v7?

Usa v7 para claves primarias en tablas con muchas inserciones, porque los IDs ordenados por tiempo mantienen los índices compactos y se ordenan por fecha de creación. Usa v4 cuando el ID sea público y no deba revelar nada sobre cuándo se creó el registro.

¿Cuánto mide un UUID?

Un UUID tiene 128 bits, es decir, 16 bytes. Su forma de texto estándar tiene 36 caracteres: 32 dígitos hexadecimales y 4 guiones. Sin guiones son 32 caracteres, y con llaves, 38.

¿Es seguro usar UUID en las URL?

Se pueden mostrar, pero no son un control de acceso. Un v4 aleatorio es difícil de adivinar, pero puede filtrarse en logs, en el historial del navegador o en la cabecera Referer, y v1 y v7 revelan cuándo se crearon. Comprueba siempre que el usuario tiene permiso para acceder al recurso.

Pruébalo gratis: Generador de UUID Gratis y sin necesidad de cuenta.