Generador UUID
UUID v4 y ULID
DesarrolloConfiguración
UUID v4 — Información
Estándar
RFC 4122
Versión
4 (aleatorio)
Tamaño
128 bits (16 bytes)
Entropía efectiva
122 bits (6 bits fijos)
Espacio
5.3 × 10³⁶ combinaciones
Formato
8-4-4-4-12 hexadecimal
Ordenable
No (aleatorio puro)
Colisión (1B UUIDs)
≈ 1 en 2.7 × 10¹⁸
Acerca de esta herramienta
El Generador UUID de lab.m8d.io crea identificadores únicos UUID v4 (RFC 4122) y ULID (Universally Unique Lexicographically Sortable Identifier) usando la API Web Crypto del navegador. Genera hasta 100 identificadores simultáneamente, con opciones de formato y análisis detallado de la estructura interna. También incluye un validador que analiza cualquier UUID (v1-v5) o ULID existente.
UUID v4 — Identificador Universalmente Único
UUID (Universally Unique Identifier) es un estándar definido en RFC 4122 para generar identificadores de 128 bits que son únicos sin necesidad de coordinación central. UUID v4 es la versión más utilizada y genera identificadores puramente aleatorios.
• Estructura — Un UUID v4 tiene el formato 8-4-4-4-12 hexadecimal: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx. El dígito '4' en la posición 13 indica la versión. El primer dígito del cuarto grupo (posición 17) indica la variante — en UUID RFC 4122, los dos bits más significativos son '10', resultando en valores 8, 9, a o b.
• Entropía — De los 128 bits totales, 6 están fijos (4 bits de versión + 2 bits de variante), dejando 122 bits de entropía aleatoria. Esto produce un espacio de 5.3 × 10³⁶ combinaciones posibles.
• Probabilidad de colisión — Para generar una colisión con probabilidad del 50% (paradoja del cumpleaños), necesitarías generar aproximadamente 2.7 × 10¹⁸ UUIDs. Si generas 1 billón de UUIDs por segundo, tardarías ~85 años. En la práctica, las colisiones son imposibles.
• Versiones de UUID — v1 (timestamp + MAC), v2 (DCE security), v3 (hash MD5 de namespace), v4 (aleatorio), v5 (hash SHA-1 de namespace), v6 (timestamp reordenado), v7 (timestamp Unix + aleatorio). Esta herramienta genera v4 y valida todas las versiones.
ULID — Identificador Ordenable Lexicográficamente
ULID (Universally Unique Lexicographically Sortable Identifier) es una alternativa moderna a UUID diseñada para ser compatible en tamaño (128 bits) pero con ventajas prácticas:
• Estructura — 26 caracteres en Crockford Base32: 10 caracteres de timestamp (48 bits, precisión de milisegundos) + 16 caracteres de aleatoriedad (80 bits). La codificación Crockford Base32 excluye las letras I, L, O y U para evitar confusiones visuales.
• Ordenamiento lexicográfico — Los ULIDs generados en momentos diferentes se ordenan cronológicamente cuando se ordenan como strings. Esto es imposible con UUID v4 (aleatorio puro) y es una ventaja crucial para bases de datos que usan el identificador como clave primaria, ya que mantiene la localidad de datos en índices B-tree.
• Timestamp — Los primeros 48 bits codifican milisegundos desde la época Unix (1 de enero de 1970). Esto permite extraer la fecha de creación de cualquier ULID sin almacenamiento adicional. El rango temporal alcanza hasta el año 10889.
• Compatibilidad — Al ser 128 bits, un ULID se almacena en el mismo espacio que un UUID. Se puede convertir bidireccionalmente a UUID estándar para compatibilidad con sistemas existentes.
• Monotonía — La especificación ULID define que dentro del mismo milisegundo, la parte aleatoria debe incrementarse monótonamente para garantizar ordenamiento estricto. Esta implementación genera aleatoriedad independiente por generación.
Cuándo usar UUID v4 vs ULID
La elección entre UUID v4 y ULID depende del contexto:
Usa UUID v4 cuando:
• Necesitas compatibilidad máxima — UUID es soportado nativamente por PostgreSQL (tipo uuid), MySQL, SQL Server, MongoDB, y prácticamente toda base de datos y lenguaje.
• El orden no importa — Si los identificadores son para referencia pura (tokens de sesión, IDs de correlación en logs, claves de API).
• Seguridad es prioridad — UUID v4 no filtra información temporal, mientras que ULID revela cuándo fue creado.
Usa ULID cuando:
• Necesitas ordenamiento temporal — Claves primarias en bases de datos donde las inserciones se benefician de localidad (B-tree, LSM-tree).
• Quieres extraer timestamps — Sin columna created_at adicional.
• Rendimiento de escritura importa — Los ULIDs secuenciales causan menos page splits en índices B-tree que los UUID v4 aleatorios, mejorando el rendimiento de escritura hasta 10x en algunas bases de datos.
• Sistemas distribuidos — Cada nodo puede generar ULIDs independientemente con garantía de orden global aproximado.
Generación segura con Web Crypto
Esta herramienta utiliza la API Web Crypto (crypto.getRandomValues()) para generar aleatoriedad criptográficamente segura:
• CSPRNG — El navegador usa un generador de números pseudoaleatorios criptográficamente seguro (Cryptographically Secure PRNG) respaldado por la entropía del sistema operativo (/dev/urandom en Linux, CryptGenRandom en Windows, SecRandomCopyBytes en macOS).
• Diferencia con Math.random() — Math.random() usa un PRNG como xorshift128+ que NO es criptográficamente seguro. Sus valores son predecibles si se conoce el estado interno. Nunca debe usarse para generar identificadores en producción.
• Rendimiento — crypto.getRandomValues() es lo suficientemente rápido para generar miles de identificadores por segundo en cualquier navegador moderno. Esta herramienta limita la generación a 100 IDs por lote para mantener la interfaz responsiva.
• Ejecución local — Todo el proceso de generación ocurre en el navegador. No se envía ningún identificador ni dato a servidores externos.
Preguntas frecuentes
¿Es seguro usar UUID v4 como token de seguridad?
UUID v4 generado con crypto.getRandomValues() tiene 122 bits de entropía criptográficamente segura, lo cual es suficiente para tokens de sesión, claves de API y similares. Sin embargo, para tokens de seguridad de alta sensibilidad (reseteo de contraseña, verificación de email), se recomienda usar 256 bits de entropía (un string aleatorio de 32 bytes en hexadecimal o 43 caracteres en Base64url). El formato UUID no es el más eficiente para este propósito — los guiones y bits fijos desperdician espacio.
¿Puede haber colisiones entre UUID v4 generados por diferentes sistemas?
En la práctica, no. El espacio de 122 bits de entropía produce 5.3 × 10³⁶ combinaciones. Según la paradoja del cumpleaños, necesitarías generar aproximadamente 2.7 × 10¹⁸ UUIDs para tener un 50% de probabilidad de colisión. Si todos los humanos del planeta generaran 1 UUID por segundo, tardarían más de 11 años en alcanzar esa probabilidad. En cualquier sistema real, las colisiones UUID v4 son matemáticamente posibles pero prácticamente imposibles.
¿Se puede extraer la fecha de un UUID v4?
No. UUID v4 es completamente aleatorio — no contiene información temporal. Para UUID v1 y v7, sí se puede extraer el timestamp (esta herramienta lo hace automáticamente en el modo de validación). Si necesitas conocer la fecha de creación de un registro, usa ULID en lugar de UUID v4, o almacena el timestamp en una columna separada.
¿Qué ventaja tiene ULID sobre UUID v7?
UUID v7 (propuesto en RFC 9562) comparte el concepto de ULID: timestamp + aleatoriedad. La diferencia principal es que UUID v7 mantiene el formato estándar UUID (8-4-4-4-12 con guiones) y es compatible con todos los sistemas que aceptan UUID, mientras que ULID usa Crockford Base32 (26 caracteres, sin guiones). ULID es más compacto como string (26 vs 36 caracteres) y no desperdicia bits en versión/variante. UUID v7 tiene soporte nativo creciente en bases de datos. En la práctica, ambos resuelven el mismo problema.
¿Qué es la codificación Crockford Base32?
Crockford Base32 es una variante de Base32 diseñada por Douglas Crockford que usa 32 caracteres: 0-9 y A-Z excluyendo I, L, O y U. Estas letras se excluyen porque se confunden visualmente con 1, 1, 0 y V respectivamente. La codificación es case-insensitive (la herramienta siempre muestra mayúsculas) y produce strings más cortos que hexadecimal (26 chars vs 32 para 128 bits). Es la misma codificación usada por la especificación ULID.