
UUID, ULID y Nanoid: ¿qué identificador único elegir en 2026?
UUID v4 aleatorio, UUID v7 y ULID ordenables, Nanoid compacto: comparativa y generadores en línea para claves primarias e IDs públicos.
Aleatorio, ordenable o compacto: tres necesidades distintas para una cadena
Un simple auto-incremento revela cuántas filas tiene una tabla, se coordina mal entre varios servidores que escriben a la vez, y es adivinable — el ID 1042 sugiere que existe un ID 1041. Por eso las aplicaciones generan IDs en el cliente o en el servidor sin un contador central. Pero «único e impredecible» no significa lo mismo según el formato elegido. El generador de UUID produce un UUID v4 puramente aleatorio, un UUID v7 cuyos primeros bits codifican una marca de tiempo (por eso se puede ordenar), o el UUID nil de prueba. El generador de ULID persigue el mismo objetivo que UUID v7 — un identificador ordenable por fecha de creación — con una escritura más corta en Base32. El generador de Nanoid abandona la marca de tiempo incorporada para optimizar la longitud de la cadena con un presupuesto de entropía dado. Los tres funcionan completamente en el navegador y están agrupados en el hub de utilidades para desarrolladores, junto al probador de regex y al generador de contraseñas.
Elegir la herramienta adecuada según el contexto
Prototipado, pruebas y comprobaciones visuales antes de escribir una sola línea de código de servidor.
El generador en línea prototipa el formato; no sustituye la generación a escala de producción.
Errores que salen caros una vez en producción
Una clave primaria alimentada con valores UUID v4 inserta cada nueva fila en una posición aleatoria del índice B-tree, lo que fragmenta las páginas y ralentiza las escrituras en una tabla de alto volumen. No es un problema de UUID en general, sino de aleatoriedad pura: UUID v7 (RFC 9562) codifica una marca de tiempo en milisegundos en sus primeros 48 bits y completa el resto de forma aleatoria, y ULID hace lo mismo en Base32. Ambos se añaden al final del índice, como un auto-incremento, sin exponer un contador utilizable. El generador de UUID cambia de v4 a v7 sin modificar la forma del campo (36 caracteres con guiones); el generador de ULID ofrece la alternativa más corta de 26 caracteres.
Sustituir un auto-incremento por un UUID, un ULID o un Nanoid impide la enumeración trivial (probar ?id=124, luego 125…) pero no verifica la autorización de nadie: un identificador obtenido por otro canal (enlace compartido, línea de log, cabecera referrer) sigue siendo legible si la API no comprueba la propiedad del recurso. ULID añade un problema propio: sus primeros 10 caracteres codifican la marca de tiempo de creación en claro. Esto es inofensivo para una clave primaria, pero no para un token que debería seguir siendo opaco — quien conozca aproximadamente la fecha de creación reduce el espacio de búsqueda antes incluso de atacar la parte aleatoria.
La resistencia a colisiones de un Nanoid depende por completo del producto tamaño × alfabeto. El ajuste por defecto de la herramienta (21 caracteres sobre el alfabeto url de 64 símbolos) apunta a una probabilidad de colisión comparable a la de un UUID v4 a un ritmo de generación realista — pero cada preajuste cambia ese cálculo. Cambiar al alfabeto «numeric» (10 símbolos) o bajar a 6-8 caracteres para un slug más corto puede reducir el espacio de identificadores en varios órdenes de magnitud, sin que nada lo indique salvo el contador de entropía mostrado en directo junto al campo de tamaño.
El selector de formato de la herramienta UUID (plano, llaves, urn:uuid:) y el interruptor de mayúsculas cambian la representación textual, no los 128 bits subyacentes — pero una columna que compara cadenas planas no sabe que {550e8400-…} y urn:uuid:550e8400-… nombran el mismo UUID sin normalizar antes. La misma lógica se aplica a ULID: Crockford Base32 se define como insensible a mayúsculas al decodificar, pero una restricción UNIQUE sobre una cadena sí es sensible a mayúsculas.
Formato, tamaño, orden: lo que realmente distingue a las cuatro variantes
Mismo objetivo — unicidad sin coordinador central — cuatro formas distintas.
Las opciones reales de cada herramienta, tal como existen hoy.
Tres situaciones concretas donde la elección del formato tiene un efecto medible.
Generar, ajustar, copiar
En el generador de UUID, la lista se actualiza en cuanto cambia una opción — no hay un botón «generar» separado. En el generador de ULID, la marca de tiempo decodificada de cada ID aparece justo debajo de la fila generada.
Paso 1 — Elegir la versión o la opción de orden
UUID: v4 para aleatoriedad pura, v7 para ordenabilidad, nil para el UUID de ceros de prueba (el número se fuerza entonces a 1). ULID: active el modo monótono si genera varios IDs dentro del mismo milisegundo y necesita un orden garantizado.
Paso 2 — Ajustar guiones, mayúsculas y formato
En UUID, elegir el formato urn:uuid: fuerza automáticamente los guiones y desactiva el interruptor de mayúsculas. En ULID, las mayúsculas están activas por defecto; la decodificación Crockford Base32 sigue siendo correcta incluso en minúsculas.
Paso 3 — Ajustar la cantidad (1 a 50) y copiar
Copie toda la lista de una vez, descárguela en .txt, o copie fila a fila con el botón de cada ID.
El generador de Nanoid muestra la entropía en bits en directo en cuanto cambia el tamaño o el alfabeto, para no tener que calcularla de cabeza.
Los mismos formatos en el servidor, en Node
Node expone crypto.randomUUID() de forma nativa para un UUID v4, sin ninguna dependencia. El módulo crypto integrado de Node no genera v7 — un pequeño paquete npm como uuid se encarga de la variante ordenable.
Ejemplo básico
Node no tiene soporte nativo para ULID. El paquete ulid ofrece la generación y la decodificación de la marca de tiempo incorporada.
Ejemplo básico
El paquete nanoid reproduce el alfabeto url y el tamaño por defecto de la herramienta (21 caracteres), con customAlphabet para un alfabeto o tamaño a medida.
Ejemplo básico
Sin instalación, sin envío de datos, hasta 50 IDs por lote, opciones de formato completas para los tres formatos. Contrapartida: sin generación de alto rendimiento en el navegador, sin garantía de monotonía entre pestañas o procesos, y un alfabeto Nanoid personalizado limitado a 256 caracteres. Use las páginas para prototipar un esquema o producir fixtures; mantenga uuid, ulid y nanoid en el servidor para producción.
Conclusión
No existe un identificador «mejor» en términos absolutos. UUID v4 sigue siendo la opción correcta para un identificador puramente opaco, sin necesidad de orden, con el soporte nativo más amplio. UUID v7 o ULID toman el relevo en cuanto el orden de inserción importa para el rendimiento de un índice o para un orden a nivel de aplicación sin una columna created_at dedicada. Nanoid busca la cadena más corta posible con un presupuesto de entropía dado, especialmente en una URL. Ninguno de los tres sustituye un control de autorización en el servidor, y ninguno está pensado para una generación de alto rendimiento en el navegador — para eso están las bibliotecas de servidor uuid, ulid y nanoid. Si estos identificadores viajan dentro de la carga JSON de una API, la guía sobre optimizar una API REST JSON complementa esta lectura, igual que el validador de JSON Schema para comprobar la forma esperada de un campo id.
Artículos relacionados

Calcula una huella MD5 o SHA, o firma un mensaje con HMAC, en el navegador. Hex, Base64 o Base64URL — checksums de texto y firmas webhook, 100 % local.

Evita SSH y nginx para un side project Next.js. Compara Railway, Render, Vercel y un VPS, y despliega desde Git tras minificar los assets en el navegador.

Convierte texto, un archivo o una imagen a Base64 (y al revés) en el navegador — data URI, adjunto email, segmento JWT. 100 % local.