Cada versión UUID — v1 a v8 — con diagramas de estructura, casos de uso, riesgo de colisión y ejemplos de código JavaScript.
Estructura
timestamp (60-bit) + clock seq (14-bit) + MAC (48-bit)
Riesgo de colisión
Very low
Ventajas
Desventajas
Mejor usado para
Legacy systems. Avoid in new projects due to MAC address exposure.
Estructura
MD5(namespace UUID + name) → UUID
Riesgo de colisión
MD5 collision risk (low for UUIDs)
Ventajas
Desventajas
Mejor usado para
Generating UUIDs from URLs, email addresses, or other stable identifiers. Use v5 instead.
Estructura
122 random bits + 4-bit version + 2-bit variant
Riesgo de colisión
Negligible (2^122 possibilities)
Ventajas
Desventajas
Mejor usado para
Default choice for most applications. IDs for records, sessions, tokens.
Estructura
SHA-1(namespace UUID + name) → UUID (top 128 bits)
Riesgo de colisión
SHA-1 — extremely low for UUID purposes
Ventajas
Desventajas
Mejor usado para
Deterministic IDs from a namespace + name. Example: UUID for 'https://example.com' is always the same.
Estructura
Unix ms timestamp (48-bit) + version (4-bit) + random (74-bit)
Riesgo de colisión
Very low (74 random bits)
Ventajas
Desventajas
Mejor usado para
Database primary keys where sort order matters. Replaces v1 for time-ordered UUIDs.
Estructura
128 bits, content defined by the implementation
Riesgo de colisión
Depends on implementation
Ventajas
Desventajas
Mejor usado para
Experimental or vendor-specific use cases where v1–v7 don't fit.
| Version | Method | Sortable | Privacy-safe | Deterministic |
|---|---|---|---|---|
| v1 | Time + MAC | ✅ | ❌ (MAC leak) | ❌ |
| v3 | MD5 hash | ❌ | ✅ | ✅ |
| v4 | Random | ❌ | ✅ | ❌ |
| v5 | SHA-1 hash | ❌ | ✅ | ✅ |
| v7 | Time + Random | ✅ | ✅ | ❌ |
| v8 | Custom | — | — | — |
// JavaScript / Node.js (built-in, Node 15+)
import { randomUUID } from 'crypto';
const v4 = randomUUID(); // → "550e8400-e29b-41d4-a716-446655440000"
// Browser
const v4 = crypto.randomUUID();
// UUID v7 (npm: uuid package v10+)
import { v7 as uuidv7 } from 'uuid';
const v7 = uuidv7(); // → "018f0b2d-4c9e-7abc-89de-f012345678ab"
// Python
import uuid
v4 = str(uuid.uuid4()) # Random
v5 = str(uuid.uuid5(uuid.NAMESPACE_URL, 'https://example.com'))
# PostgreSQL
SELECT gen_random_uuid(); -- v4 (pg 13+)
SELECT uuid_generate_v4(); -- v4 (uuid-ossp extension)
SELECT gen_random_uuid()::text; -- as textUn UUID (Identificador Universalmente Único) es un identificador de 128 bits estandarizado en RFC 4122. Está formateado como 8-4-4-4-12 caracteres hexadecimales separados por guiones. Están diseñados para ser únicos en el espacio y el tiempo sin una autoridad central.
Use v4 para la mayoría de propósitos generales — es generada aleatoriamente y tiene una probabilidad de colisión extremadamente baja. Use v7 si necesita UUIDs ordenados por tiempo para claves primarias de base de datos. Use v5 para UUIDs deterministas desde un par namespace+nombre. Evite v1 en nuevos proyectos ya que expone la dirección MAC.
UUID v4 es puramente aleatoria (122 bits aleatorios). UUID v7 codifica un timestamp Unix en los primeros 48 bits seguido de bits aleatorios. Esto hace que los UUIDs v7 sean ordenables por tiempo de creación, lo que mejora significativamente el rendimiento del índice B-tree en bases de datos.
Prácticamente sí. UUID v4 tiene 122 bits aleatorios, dando 2^122 ≈ 5,3 × 10^36 valores posibles. Para tener un 50% de probabilidad de colisión necesitaría generar unos 2,7 × 10^18 UUIDs — mucho más de lo que cualquier aplicación realista generaría.