Tech

Generador de UUID

Generá identificadores únicos universales (UUID) según la RFC 4122. Versión 4 (aleatorio) o versión 7 (ordenable por tiempo). Individuales o en lote.

¿Qué es un UUID?

Un UUID (Universally Unique Identifier) es un identificador de 128 bits especificado en la RFC 4122. Se representa como 32 caracteres hexadecimales separados en cinco grupos por guiones: xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx, donde M indica la versión y N los bits de variante. Existen siete versiones; las más usadas hoy son v4 y v7.

Su propósito es resolver el problema de generar identificadores únicos en sistemas distribuidos sin coordinarse con un servidor central. Si dos máquinas generan UUIDs al mismo tiempo, la probabilidad de colisión es despreciable.

UUID v4 vs UUID v7

UUID v4 es 122 bits de aleatoriedad pura, con 6 bits fijos de versión y variante. Excelente para casos donde no querés revelar nada sobre el orden de creación ni la frecuencia.

UUID v7 (estandarizado en RFC 9562, 2024) coloca un timestamp Unix de 48 bits al principio, seguido de 74 bits de aleatoriedad. Resultado: los UUIDs son ordenables por tiempo, lo que mejora drásticamente el rendimiento de los índices B-tree en bases de datos como PostgreSQL o MySQL. Si insertás millones de filas con UUIDs v4, el índice se fragmenta; con v7, no.

Cuándo usar UUID en lugar de un entero autoincremental

  • APIs públicas: los UUIDs no revelan cuántos registros tenés ni a qué velocidad crecen.
  • Sistemas distribuidos: múltiples nodos pueden generar IDs sin coordinarse.
  • Migración entre bases: los IDs no chocan al fusionar datasets.
  • IDs visibles para el usuario: evitan el patrón "ID 1, ID 2..." que invita a enumerar.
  • Frontend optimista: el cliente puede crear el UUID antes de que el servidor confirme.

Cuándo seguir usando autoincremental

Los UUID no son gratis. Ocupan más espacio (16 bytes vs 4-8 de un entero), son más caros de comparar y generan índices más grandes. En tablas internas con miles de millones de filas y consultas críticas, un BIGINT autoincremental sigue ganando. Algunas estrategias híbridas guardan ambos: la PK interna es BIGINT, el UUID es público.

Probabilidad de colisión

Aplicando la paradoja del cumpleaños, para tener 50% de chance de colisión entre UUIDs v4 habría que generar 2.71 × 10^18 (2,7 trillones) de identificadores. A 1.000 millones por segundo, llevaría unos 85 años de cómputo continuo. En la práctica, podés tratar al UUID como único sin preocuparte.

Validación e inserción

El formato es siempre el mismo: 8-4-4-4-12 caracteres hexadecimales. PostgreSQL tiene un tipo uuid nativo que ocupa 16 bytes. MySQL no, pero podés usar BINARY(16) con UUID_TO_BIN/BIN_TO_UUID. SQLite y MongoDB lo guardan directamente como string.

Privacidad y reproducibilidad

Genfy usa crypto.randomUUID() cuando está disponible (todos los navegadores modernos) y un fallback con crypto.getRandomValues si no. Todo es client-side: nada se loguea ni se envía.

Preguntas frecuentes

¿Qué es un UUID y para qué sirve?

Un UUID es un identificador único de 128 bits (RFC 4122). Se usa como clave primaria, ID en APIs y trazas distribuidas.

¿Diferencia entre UUID v4 y v7?

v4 es 100% aleatorio. v7 incluye un timestamp y es ordenable cronológicamente, lo que mejora los índices de bases de datos.

¿Pueden colisionar?

Estadísticamente no. Generar trillones de UUIDs sería necesario para tener 50% de chance de colisión.

¿UUID o ULID/CUID?

UUID está estandarizado y soportado en todos lados. ULID/CUID son más cortos y ordenables; útiles cuando importa la legibilidad.