UUID


¿Qué es un UUID?

UUID (Universally Unique Identifier) es un identificador de 128 bits diseñado para ser único en cualquier sistema, en cualquier momento, sin necesidad de una autoridad central que los coordine. Se representa como 32 dígitos hexadecimales divididos en 5 grupos separados por guiones:

550e8400-e29b-41d4-a716-446655440000
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
              ^    ^
              |    Variante (bits 6-7 del grupo N)
              Versión (4 bits del grupo M)

Versiones más usadas

Existen varias versiones. En el desarrollo web cotidiano solo necesitas conocer tres:

v4 — aleatorio (la más habitual)

Generado completamente al azar. Probabilidad de colisión prácticamente nula. Es el estándar por defecto en la mayoría de sistemas:

// En Node.js — módulo nativo desde v14.17
import { randomUUID } from 'node:crypto';
const id = randomUUID();
// '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'

v7 — basado en timestamp (el nuevo estándar)

Combina un timestamp de alta resolución con bits aleatorios. A diferencia de v4, los UUIDs v7 son ordenables cronológicamente — generados en secuencia, quedan en orden. Esto mejora el rendimiento en índices de bases de datos:

// Con el paquete 'uuid'
import { v7 as uuidv7 } from 'uuid';
const id = uuidv7();
// '018f5b2a-3c4d-7e2f-9a1b-0c5d6e7f8a9b'
//  ^^^^^^^^ timestamp — los primeros 48 bits son la hora

v7 está siendo adoptado rápidamente como sucesor de v4 en sistemas nuevos.

v1 — basado en MAC + timestamp (legado)

Generado con la dirección MAC del equipo y la hora. Evítalo en sistemas nuevos — expone la dirección MAC y genera colisiones si varios procesos crean IDs al mismo tiempo.

UUID vs otros sistemas de ID

SistemaEjemploCoordinación centralOrdenable
Auto-increment (SQL)1, 2, 3Sí (base de datos)
UUID v49b1deb4d-...NoNo
UUID v7018f5b2a-...No
ULID01ARZ3NDEKTSV4RRFFQ69G5FAVNo
NanoIDV1StGXR8_Z5jdHi6B-myTNoNo

Los IDs auto-incrementales son más compactos y fáciles de leer, pero tienen dos problemas: exponen cuántos registros hay (/usuario/1 vs /usuario/137892) y no escalan bien en sistemas distribuidos donde varias instancias crean registros en paralelo.

Cuándo usar UUID

// ✅ Bien: IDs de recursos expuestos en URLs
const articulo = {
  id: randomUUID(),  // /articulos/9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d
  titulo: 'Mi artículo'
};

// ✅ Bien: tokens de sesión, links de confirmación
const tokenReset = randomUUID();

// ✅ Bien: sistemas distribuidos donde varios servicios crean registros
// sin pasar por la misma base de datos

// ❌ Evitar: tablas de unión internas que nunca salen de la BD
// (auto-increment es más eficiente en joins)

En JavaScript / Node.js

Sin dependencias (Node.js 14.17+):

import { randomUUID } from 'node:crypto';
const id = randomUUID(); // UUID v4

Con el paquete uuid (si necesitas v7 u otras versiones):

npm install uuid
import { v4 as uuidv4, v7 as uuidv7 } from 'uuid';

uuidv4() // '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'
uuidv7() // '018f5b2a-3c4d-7e2f-9a1b-0c5d6e7f8a9b' — ordenable

En el navegador (Web Crypto API):

const id = crypto.randomUUID(); // Disponible en todos los navegadores modernos

Validar un UUID

const UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;

UUID_REGEX.test('550e8400-e29b-41d4-a716-446655440000') // true
UUID_REGEX.test('esto-no-es-un-uuid')                   // false