Generador de ULID

Genera de forma masiva ULID, identificadores ordenables cronológicamente que funcionan como alternativa a los UUID.

Qué significa generar ULID

Generar ULID consiste en emitir en bloque identificadores únicos globales que se ordenan por tiempo: el Universally Unique Lexicographically Sortable Identifier. Un ULID es una cadena de 26 caracteres en Crockford Base32 cuyos 10 primeros codifican el instante de generación y cuyos 16 restantes proceden de una fuente aleatoria criptográficamente segura. A diferencia de un identificador totalmente aleatorio como el UUID v4, su gran virtud es que ordenar las cadenas alfabéticamente las ordena también por el momento en que se crearon.

Esta herramienta toma la parte aleatoria de crypto.getRandomValues() de la Web Crypto API, de modo que la fuente es criptográficamente segura y no un simple generador pseudoaleatorio. Todo ocurre dentro del navegador: ni el número que introduce ni los identificadores producidos se envían a un servidor. Se pueden generar hasta 1.000 de una vez, y la salida está disponible en mayúsculas —la forma canónica de la especificación— o en minúsculas.

Cómo generar ULID

  1. Indique cuántos necesita Escriba el número de ULID a emitir de una vez, entre 1 y 1.000.
  2. Decida si los quiere en minúsculas Marque la opción de minúsculas si desea uniformidad para usarlos en una URL o en un registro. Ambas cajas son válidas según la especificación.
  3. Pulse generar Se listan juntos los ULID solicitados, con la hora actual en la parte de marca temporal.
  4. Copie los resultados Cópielos uno a uno, o use copiar todo para llevarse la lista completa separada por saltos de línea.

Consejos para aprovecharla mejor

  • Los primeros 10 caracteres de un ULID codifican una marca de tiempo (el momento de creación), mientras que los 16 restantes son aleatorios. Salvo que dos ULID se generen en el mismo milisegundo, basta con ordenarlos como cadenas de texto para obtener el orden cronológico de creación.
  • Usar un UUID v4 completamente aleatorio como clave primaria en una base de datos tiende a fragmentar los índices B-tree, ya que las nuevas filas se insertan en posiciones aleatorias. Como los ULID se ordenan aproximadamente por tiempo, las filas nuevas se añaden cerca del final del índice, lo que ayuda a mitigar este problema.
  • Un ULID se representa con 26 caracteres en Base32 de Crockford (el alfabeto de 32 caracteres `0`-`9` y `A`-`Z` sin las letras I, L, O y U, fáciles de confundir), lo que lo hace más corto que un UUID (36 caracteres incluyendo guiones) y seguro de usar en entornos que no distinguen mayúsculas de minúsculas.
  • Para comparar formatos con Nano ID y UUID v4, consulta la tabla comparativa disponible en nuestra herramienta hermana, el Generador de Nano ID.

Cuándo ayuda generar ULID

Claves primarias e identificadores de registro

Al adoptar ULID como clave primaria de una tabla nueva, puede preparar pronto en el desarrollo un lote de identificadores para registros ficticios y datos iniciales.

Identificadores de evento en un sistema orientado a eventos

Cuando cada evento de una cola de mensajes o de un sistema distribuido necesita un identificador único, los ULID se ordenan por tiempo, lo que facilita mucho seguir los registros cronológicamente.

Identificadores de registro y traza de muestra

Produzca al instante identificadores con el formato real para probar o demostrar una plataforma de registro o una herramienta de trazado.

Comparar con otros formatos de identificador

Si duda entre ULID, UUID v4, UUID v7 o Nano ID para URL cortas, compare antes el aspecto y la longitud reales. Véanse también la generación de UUID, la generación de UUID v7 y la generación de Nano ID.

Términos relacionados con los ULID

ULID
Abreviatura de Universally Unique Lexicographically Sortable Identifier. Identificador único de 128 bits cuyos 48 primeros bits guardan la hora de generación, de modo que ordenar las cadenas basta para disponerlos cronológicamente.
Crockford Base32
Codificación que emplea 32 caracteres: las cifras 0–9 y las letras A–Z, retiradas las visualmente confundibles I, L, O y U. Un ULID se codifica así en 26 caracteres.
Monotonía
Propiedad de un valor que siempre crece con el tiempo. Un ULID no garantiza el orden cuando se generan varios dentro del mismo milisegundo, pero la extensión de generación monótona prevista en la especificación mantiene el crecimiento incluso entonces.
UUID
Abreviatura de Universally Unique Identifier. Norma de identificador único de 128 bits definida en el RFC 4122, escrita habitualmente con 36 caracteres hexadecimales incluidos los guiones. Es una norma independiente del ULID.
Identificadores únicos en sistemas distribuidos
Mecanismo por el que varios servidores o procesos generan cada uno identificadores sin colisión de forma independiente, sin consultar a un emisor central. ULID y UUID combinan hora de generación y aleatoriedad para reducir la probabilidad de colisión a un nivel insignificante.
Parte de marca temporal
Los 10 primeros caracteres de un ULID: un valor de 48 bits que codifica la hora de generación en milisegundos como Crockford Base32. Es el núcleo del mecanismo que permite deducir el orden de generación con una simple comparación de cadenas.

Preguntas frecuentes

Un ULID (Universally Unique Lexicographically Sortable Identifier) es una especificación de identificadores que, al igual que un UUID, son globalmente únicos, pero que además incorporan información sobre el momento de creación, de modo que un simple ordenamiento de cadenas de texto los deja en orden cronológico.

La diferencia principal es si el identificador puede ordenarse por momento de creación. Un UUID v4 es un valor de 128 bits completamente aleatorio, por lo que no se puede ordenar por orden de creación, mientras que los primeros 48 bits de un ULID son una marca de tiempo en milisegundos, así que una simple comparación de cadenas revela el orden de creación. También hay una diferencia de formato: un ULID tiene 26 caracteres en Base32, mientras que un UUID tiene 36 caracteres hexadecimales incluyendo guiones.

Usar un valor completamente aleatorio como UUID v4 como clave primaria hace que las filas nuevas se inserten en posiciones aleatorias dentro del índice, lo que puede provocar fragmentación del índice B-tree y reducir la eficiencia de la caché. Como los ULID se ordenan aproximadamente por tiempo, las filas nuevas tienden a añadirse cerca del final del índice, lo que se dice que ayuda a mitigar este problema.

Los primeros 10 caracteres son una marca de tiempo de 48 bits en milisegundos (capaz de representar fechas hasta aproximadamente el año 10889), y los 16 caracteres restantes son 80 bits de aleatoriedad. En total son 128 bits, los mismos que un UUID, pero con información del momento de creación incorporada, lo cual es la característica distintiva del ULID.
Tool-kun

A propósito — cómo ULID introdujo el orden cronológico en el mundo de los identificadores

La especificación ULID fue publicada en 2016 por Alizain Feerasta. En aquel momento, UUID ya era el método estándar para generar identificadores únicos en sistemas distribuidos, pero su naturaleza completamente aleatoria (que impedía ordenarlos) resultaba poco práctica para la eficiencia de los índices de bases de datos y para el análisis temporal de registros (logs). ULID nació precisamente para resolver ese problema.

En realidad, UUID también tiene variantes basadas en tiempo: la versión 1 (dirección MAC más marca de tiempo) y la versión 7 (estandarizada en 2024, que combina marca de tiempo y valores aleatorios). Sin embargo, ULID es una especificación independiente, distinta del estándar UUID (RFC 4122), y se distingue por perseguir un diseño más simple junto con una representación compacta en Base32.

Hoy en día existen bibliotecas de implementación de ULID en prácticamente todos los lenguajes de programación importantes, y se usa ampliamente en escenarios donde importa conservar el orden de creación: identificadores de eventos en sistemas distribuidos, identificadores de traza en registros y claves primarias de bases de datos, entre otros. Su filosofía de diseño coincide en gran medida con la de UUID v7, que surgió por la misma época, y ambos coexisten como enfoques distintos para el mismo objetivo: un identificador ordenable similar al UUID.