¿Qué tipo debo usar?
| UUID v4 | UUID v7 | ULID | |
|---|---|---|---|
| Contenido | 122 bits aleatorios | marca de tiempo de 48 bits en ms + 74 bits aleatorios | marca de tiempo de 48 bits en ms + 80 bits aleatorios |
| Ordenable por tiempo | No | Sí | Sí |
| Forma de texto | 8-4-4-4-12 hex | 8-4-4-4-12 hex | 26 caracteres Crockford Base32 |
| Estándar | RFC 4122 / 9562 | RFC 9562 (2024) | Especificación comunitaria |
| Comodidad en bases de datos | Mala como clave primaria: las inserciones aleatorias fragmentan los índices B-tree | Buena: las filas nuevas caen al final del índice | Buena, pero necesita una columna de 128 bits o una cadena de 26 caracteres |
Para un sistema nuevo, UUID v7 es la opción sensata por defecto: es un UUID estándar, todas las bases de datos y lenguajes lo aceptan y mantiene los índices compactos. Usa v4 cuando el ID no deba revelar cuándo se creó. ULID es una buena elección donde importa su forma de texto más corta y apta para URL y el ecosistema ya lo usa.
Leer los bits
En xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx, el dígito M es la versión (4 o 7) y los primeros bits de N son la variante (8, 9, a o b en los UUID estándar). En un v7, los primeros 12 dígitos hex son el tiempo Unix en milisegundos; en un v1 el tiempo está repartido en tres campos y los últimos 12 dígitos suelen ser la dirección MAC de la máquina que lo creó. El inspector decodifica todo esto.
Colisiones
Un UUID v4 tiene 2¹²² posibilidades. Para alcanzar un 50 % de probabilidad de una sola colisión tendrías que generar unos 2,7 × 10¹⁸, aproximadamente mil millones por segundo durante 85 años. En la práctica el riesgo es una mala fuente aleatoria, no las matemáticas, por eso esta página usa crypto.getRandomValues y no Math.random.
Preguntas
¿Cuál es la diferencia entre UUID y GUID?
Ninguna en la práctica. GUID es el nombre que da Microsoft al mismo identificador de 128 bits. Las herramientas de Windows suelen escribirlos en mayúsculas con llaves, que es lo que reproduce la opción de formato de aquí.
¿Estos UUID son realmente aleatorios?
Los bits aleatorios vienen del generador criptográficamente seguro del navegador (WebCrypto), la misma fuente que se usa para claves. No se derivan de tu reloj ni de nada predecible, salvo que v7 y ULID incluyen a propósito la hora actual.
¿Se puede rastrear un UUID hasta mí?
Un v4 no. Un v7 o ULID revela cuándo se creó. Un v1 puede contener la dirección MAC de la máquina que lo generó, por eso v1 cayó en desuso.
¿Debo usar un UUID como clave primaria en la base de datos?
Sí si necesitas IDs generados por clientes o entre servicios, pero prefiere v7 para que las inserciones sean secuenciales. Guárdalo en una columna UUID nativa de 16 bytes (uuid en PostgreSQL, BINARY(16) en MySQL) en lugar de una cadena de 36 caracteres.
¿Qué es el UUID nil?
00000000-0000-0000-0000-000000000000, definido como marcador de posición que significa «sin valor». El RFC 9562 define también un UUID max de todo unos.