Generador UUID
Generar identificadores UUID v1, v3, v4, v5, v7
Un UUID (Identificador Universalmente Único) es un valor de 128 bits garantizado como único en espacio y tiempo. La versión 4 (aleatoria) es la más común — la probabilidad de colisión es astronómicamente baja.
¿Qué es un UUID?
Un UUID (Universally Unique Identifier, Identificador Universalmente Único) es un identificador de 128 bits estandarizado por el RFC 4122. Los UUIDs están diseñados para ser globalmente únicos sin requerir una autoridad de registro central — cualquier sistema puede generar uno de forma independiente con un riesgo de duplicación casi nulo.
Los UUIDs son omnipresentes en la ingeniería de software. Sirven como claves primarias en bases de datos, IDs de correlación en sistemas distribuidos, tokens de sesión en aplicaciones web e identificadores en APIs. Su naturaleza descentralizada los hace ideales para sistemas donde la coordinación entre generadores de IDs es impráctica o imposible.
La representación textual canónica de un UUID tiene 36 caracteres: 32 dígitos hexadecimales mostrados en cinco grupos separados por guiones, siguiendo el patrón 8-4-4-4-12.
Versiones de UUID
No todos los UUIDs son iguales. El número de versión (codificado en el carácter 13) determina cómo se genera el UUID. Cada versión hace diferentes compensaciones entre garantías de unicidad, ordenabilidad y privacidad.
Versión 1 — Tiempo + Dirección MAC
UUID v1 combina una marca de tiempo de 60 bits (intervalos de 100 nanosegundos desde el 15 de octubre de 1582) con la dirección MAC de 48 bits de la máquina generadora y una secuencia de reloj de 14 bits. Esto garantiza unicidad entre máquinas y en el tiempo, pero expone la identidad del hardware del creador.
Versión 3 — Hash de Espacio de Nombres MD5
UUID v3 genera un UUID determinista al aplicar hash a un UUID de espacio de nombres y un nombre usando MD5. El mismo espacio de nombres + nombre siempre produce el mismo UUID. Útil para generar IDs reproducibles a partir de entradas conocidas, pero MD5 se considera criptográficamente débil.
Versión 4 — Aleatorio
UUID v4 llena 122 de los 128 bits con datos criptográficamente aleatorios (6 bits están reservados para versión y variante). Esta es la versión más ampliamente utilizada debido a su simplicidad y fuertes garantías de unicidad. Sin coordinación, sin marcas de tiempo, sin direcciones MAC — solo aleatoriedad.
Versión 5 — Hash de Espacio de Nombres SHA-1
UUID v5 funciona como v3 pero usa SHA-1 en lugar de MD5. Preferido sobre v3 para nuevas aplicaciones debido a la mayor resistencia a colisiones de SHA-1 (aunque SHA-1 también está descontinuado para uso criptográfico, sigue siendo adecuado para hash de espacios de nombres).
Versión 7 — Aleatorio Ordenado por Tiempo (RFC 9562)
UUID v7 es la adición más reciente, definida en el RFC 9562 (2024). Incorpora una marca de tiempo Unix en milisegundos en los 48 bits más significativos, seguida de datos aleatorios. El resultado es un UUID que es tanto único como cronológicamente ordenable — ideal para claves primarias de bases de datos donde el rendimiento de índices B-tree es importante.
Estructura del UUID
Cada UUID sigue el mismo diseño de 128 bits, pero la interpretación de ciertos bits depende de la versión:
El nibble de versión es el primer dígito hexadecimal del tercer grupo. Un 4 significa UUID v4 (aleatorio), un 7 significa UUID v7 (ordenado por tiempo), y así sucesivamente.
Los bits de variante ocupan los bits más significativos del cuarto grupo. Para los UUIDs RFC 4122, los bits iniciales son 10 en binario, lo que significa que el primer dígito hexadecimal de ese grupo siempre es 8, 9, a o b.
Comparación de Versiones
| Versión | Fuente | Ordenable | Privacidad | Mejor Para |
|---|---|---|---|---|
| v1 | Marca de tiempo + MAC | Parcialmente | Baja (MAC expuesta) | Sistemas heredados |
| v4 | Aleatorio | No | Alta | Propósito general, APIs |
| v5 | SHA-1(espacio de nombres + nombre) | No | Alta | IDs deterministas a partir de entradas conocidas |
| v7 | Marca de tiempo + Aleatorio | Sí | Alta | PKs de base de datos, logs de eventos |
Cuándo Usar Cada Versión
UUID v4 es la opción segura por defecto. Funciona en todas partes, no requiere coordinación y no revela nada sobre el sistema generador. Úselo para identificadores de API, tokens de sesión, IDs de correlación y en cualquier lugar donde la unicidad sea la preocupación principal.
UUID v7 es la mejor opción para claves primarias de bases de datos. Los UUIDs aleatorios tradicionales (v4) causan fragmentación de índices B-tree porque los nuevos valores se dispersan por todo el índice. Los valores UUID v7 son monótonamente crecientes (porque la marca de tiempo va primero), por lo que las nuevas filas siempre se agregan al final del índice — igual que los enteros auto-incrementales, pero sin una secuencia central.
UUID v5 es ideal cuando necesita IDs deterministas y reproducibles. Dado el mismo espacio de nombres y nombre, v5 siempre produce el mismo UUID. Esto es útil para generar IDs estables a partir de URLs, nombres DNS u otras entradas conocidas sin almacenar una tabla de mapeo.
Casos de Uso Comunes
- Claves primarias de bases de datos: Los UUIDs eliminan la necesidad de generadores de secuencia centralizados, permitiendo que sistemas distribuidos creen registros de forma independiente sin conflictos
- Identificadores de recursos API: Los UUIDs en URLs (
/users/550e8400-e29b-41d4-a716-446655440000) no son secuenciales, previniendo ataques de enumeración - Rastreo distribuido: Los IDs de correlación (UUIDs) rastrean solicitudes a través de microservicios, apareciendo en los logs de cada servicio que maneja la solicitud
- Nombrado de archivos y activos: Los UUIDs previenen colisiones de nombres de archivo cuando múltiples usuarios suben archivos simultáneamente
- Claves de idempotencia: Las APIs usan UUIDs generados por el cliente para asegurar que una solicitud se procese solo una vez, incluso si se reintenta
Prueba estos ejemplos
Un UUID v4 estándar en formato canónico 8-4-4-4-12. El '4' en el tercer grupo indica la versión 4 (aleatorio). Los bits iniciales del cuarto grupo (a, 8, 9 o b) indican la variante RFC 4122.
550e8400-e29b-41d4-a716-446655440000 El UUID nulo — los 128 bits establecidos en cero. Se usa como valor centinela para representar 'sin UUID' o 'desconocido'. Definido en el RFC 4122 como un caso especial.
00000000-0000-0000-0000-000000000000