Generador de UUID Versión 7
UUIDv7 • Ordenado por Tiempo (RFC 9562)
00000000-0000-0000-0000-000000000000
Encapsular:
Generar UUIDs Masivos
0 msReady
Máx 5.000
Formato y Estructura
Listo
No batch active1-click copy available on each row
Estándar Moderno (2024)•RFC 9562 Sección 5.7
Especificación Técnica UUID Versión 7 (RFC 9562)
UUIDv7 combina una marca de tiempo Unix de 48 bits (en milisegundos) con 74 bits de entropía criptográfica aleatoria y secuencia. Fue estandarizado en RFC 9562 (2024) para resolver la degradación de índices y la fragmentación de páginas en bases de datos causadas por UUIDv4.
Distribución de Bits y Estructura Binaria
Distribución detallada de 128 bits según las normas RFC.
| Campo | Rango de Bits | Propósito y Descripción |
|---|---|---|
| unix_ts_ms | 48 bits (0-47) | Marca de tiempo Epoch de Unix en milisegundos (big-endian). |
| ver | 4 bits (48-51) | Valor binario constante 0111 (identifica la Versión 7). |
| rand_a | 12 bits (52-63) | Entropía aleatoria o contador de secuencia sub-milisegundo. |
| var | 2 bits (64-65) | Valor binario constante 10 (variante estándar RFC 4122/9562). |
| rand_b | 62 bits (66-127) | Bits de entropía pseudoaleatoria criptográficamente segura. |
✓
Ventajas y Fortalezas
- •Orden cronológico natural; ideal para índices B-Tree agrupados (PostgreSQL, MySQL, SQLite).
- •Elimina E/S aleatoria en disco, desalojo de caché y división de páginas B-Tree en inserciones masivas.
- •74 bits de entropía por milisegundo previenen colisiones en microservicios distribuidos.
- •La marca de tiempo se puede decodificar directamente sin consultar la base de datos.
!
Consideraciones y Desventajas
- •Revela la hora aproximada de creación (resolución de milisegundos) en URLs públicas.
- •Requiere un contador monotónico al generar múltiples IDs en el mismo milisegundo.
Recomendado para
- →Claves primarias en bases de datos relacionales y documentales (PostgreSQL, MySQL, CockroachDB, MongoDB).
- →Transmisión de eventos, registros de auditoría y colas de mensajes (Kafka, RabbitMQ, SQS).
- →Series temporales y registros cronológicos.
Cuándo evitar
- ✕Tokens de seguridad o cookies de sesión secretas donde la marca temporal deba ser confidencial.
- ✕Sistemas que requieren enteros secuenciales sin sobrecarga temporal.
Ejemplos de Implementación en Código
Native Node.js / BrowserTypeScript / Node.js
// Browser / Node 22+ with Web Crypto
function generateUUIDv7(): string {
const bytes = new Uint8Array(16);
crypto.getRandomValues(bytes);
const now = Date.now();
bytes[0] = (now / 0x10000000000) & 0xff;
bytes[1] = (now / 0x100000000) & 0xff;
bytes[2] = (now / 0x1000000) & 0xff;
bytes[3] = (now / 0x10000) & 0xff;
bytes[4] = (now / 0x100) & 0xff;
bytes[5] = now & 0xff;
bytes[6] = (bytes[6] & 0x0f) | 0x70; // version 7
bytes[8] = (bytes[8] & 0x3f) | 0x80; // variant
return [...bytes].map((b, i) =>
(i === 4 || i === 6 || i === 8 || i === 10 ? '-' : '') + b.toString(16).padStart(2, '0')
).join('');
}Python (uuid6 / 3.14+)Python
import uuid6
new_id = uuid6.uuid7()
print(new_id) # e.g. 018e6a12-8921-71e4-8a4e-128a9b345678PostgreSQL FunctionPostgreSQL
-- PostgreSQL 13+ native UUIDv7 generator
CREATE OR REPLACE FUNCTION uuid_generate_v7()
RETURNS uuid AS $$
DECLARE
v_time numeric = extract(epoch FROM clock_timestamp()) * 1000;
v_bytes bytea = gen_random_bytes(16);
BEGIN
v_bytes = set_byte(v_bytes, 0, (v_time::bigint >> 40)::int);
v_bytes = set_byte(v_bytes, 1, (v_time::bigint >> 32)::int);
v_bytes = set_byte(v_bytes, 2, (v_time::bigint >> 24)::int);
v_bytes = set_byte(v_bytes, 3, (v_time::bigint >> 16)::int);
v_bytes = set_byte(v_bytes, 4, (v_time::bigint >> 8)::int);
v_bytes = set_byte(v_bytes, 5, (v_time::bigint)::int);
v_bytes = set_byte(v_bytes, 6, (get_byte(v_bytes, 6) & 15) | 112);
v_bytes = set_byte(v_bytes, 8, (get_byte(v_bytes, 8) & 63) | 128);
RETURN encode(v_bytes, 'hex')::uuid;
END;
$$ LANGUAGE plpgsql VOLATILE;Preguntas Frecuentes
¿Por qué cambiar de UUIDv4 a UUIDv7?▼
UUIDv4 inserta datos aleatoriamente en el índice B-Tree, causando fragmentación severa. UUIDv7 se añade secuencialmente en orden cronológico, logrando hasta 4 veces más velocidad de inserción.
¿Es UUIDv7 compatible con columnas existentes de UUIDv4?▼
Sí. Ambos formatos usan el mismo estándar de 128 bits (32 dígitos hexadecimales con 4 guiones) y son 100% compatibles sin migración de esquemas.
¿Pueden colisionar dos UUIDv7 generados en el mismo milisegundo?▼
No. Incluyen 74 bits de entropía y secuenciación que permiten generar miles de millones de identificadores por milisegundo sin riesgo.