Utilia

Generador de ULID y Nano ID

Genera ULID (con opción monótona) o Nano ID con alfabeto y longitud a medida, en lote, decodifica la fecha de un ULID y calcula el riesgo de colisión.

Tipo de ID

Decodificar un ULID

Cómo generar ULID o Nano ID

  1. En Tipo de ID, elige ULID (ordenable) o Nano ID (corto).
  2. Define la Cantidad (de 1 a 1000). Se generan diez ID en cuanto se carga la página.
  3. Para los ULID, deja marcado Monótono (estrictamente creciente) para que los ID creados en el mismo milisegundo sigan ordenados, y marca Minúsculas si tu sistema lo prefiere.
  4. Para los Nano ID, elige un Alfabeto (o Personalizado… y escribe tus propios caracteres) y una Longitud.
  5. Pulsa Generar y luego Copiar la lista o Descargar un archivo .txt (un ID por línea).

Para leer la fecha oculta en un ULID, pégalo en Decodificar un ULID o pulsa Decodificar el primer ID. La herramienta muestra la marca de tiempo en UTC (ISO 8601), en tu hora local y en milisegundos Unix, además de la parte aleatoria de 80 bits en hexadecimal.

¿Qué es un ULID?

Un ULID (Universally Unique Lexicographically Sortable Identifier) es un identificador de 128 bits escrito como 26 caracteres en Base32 de Crockford, por ejemplo 01ARZ3NDEKTSV4RRFFQ69G5FAV. Los 10 primeros caracteres codifican una marca de tiempo de 48 bits en milisegundos (suficiente hasta el año 10889); los 16 últimos son 80 bits aleatorios. El Base32 de Crockford omite I, L, O y U para evitar confusiones, y la decodificación no distingue mayúsculas de minúsculas.

Como el tiempo va primero, los ULID se ordenan alfabéticamente según su orden de creación. Eso los convierte en buenas claves primarias: las filas nuevas se añaden al final de un índice B-tree en lugar de dispersarse como los UUID aleatorios, y puedes ordenar por ID en lugar de por una columna de fecha aparte.

Modo monótono. Dentro de un mismo milisegundo, unos ULID aleatorios quedarían en orden aleatorio. Con la opción monótona, la herramienta sigue la especificación ULID: cuando se crean varios ID en el mismo milisegundo, conserva la marca de tiempo y suma 1 a la parte aleatoria anterior. Si el reloj retrocede, mantiene la última marca de tiempo, así que la secuencia nunca disminuye.

Ten en cuenta que un ULID revela cuándo se creó. No lo uses donde esa información sea sensible.

¿Qué es un Nano ID?

Nano ID es un identificador aleatorio compacto. Por defecto tiene 21 caracteres de un alfabeto de 64 caracteres seguro para URL (A–Z a–z 0–9 _ -), lo que da 126 bits aleatorios, parecido a un UUID v4 (122 bits) con menos caracteres. Puedes elegir hexadecimal, solo dígitos, minúsculas y dígitos, alfanumérico, un conjunto sin caracteres parecidos (sin 0/O, 1/l/I, 5/S…) para códigos que la gente tenga que teclear, o tu propio alfabeto de 2 a 256 caracteres. Los caracteres repetidos en un alfabeto personalizado se eliminan, porque harían que algunos caracteres fueran más probables.

Cada carácter se extrae con crypto.getRandomValues mediante muestreo por rechazo, así que no hay sesgo de módulo.

Probabilidad de colisión

El panel Probabilidad de colisión aplica la cota del cumpleaños. Con un alfabeto de tamaño A y una longitud L, hay N = A^L ID posibles. Tras k ID, la probabilidad de al menos un duplicado es aproximadamente 1 − e^(−k²/2N), así que se alcanza un riesgo del 1 % tras k ≈ √(2N · ln(1/0,99)) ID. Introduce los ID generados por hora para ver cuánto tardarías. Con los ajustes predeterminados y 1000 ID por hora, un riesgo del 1 % tarda unos 149 000 millones de años; con 8 caracteres hexadecimales basta con unos 9300 ID.

Preguntas frecuentes

¿ULID o UUID?

Ambos tienen 128 bits. Un ULID es más corto de escribir (26 caracteres en lugar de 36) y se ordena por tiempo. La versión 7 de UUID ofrece ahora la misma ordenación temporal en el formato UUID estándar, que las bases de datos suelen almacenar de forma nativa. Elige UUID v7 si tu stack lo admite y ULID si quieres una cadena compacta y legible.

¿Los ULID y los Nano ID son lo bastante seguros para tokens?

Los Nano ID con el alfabeto y la longitud predeterminados tienen 126 bits aleatorios de un generador criptográfico, suficiente para enlaces imposibles de adivinar. Los ULID solo tienen 80 bits aleatorios y, en modo monótono, los ID consecutivos se diferencian en uno, así que no uses ULID como secretos.

¿Puedo acortar un Nano ID?

Sí, pero el riesgo de colisión crece muy deprisa. Consulta el valor ID para un 1 % de probabilidad de duplicado para tu longitud y alfabeto antes de confiar en un ID corto.

¿Por qué el decodificador rechaza mi ULID?

Un ULID debe tener exactamente 26 caracteres, usar solo caracteres del Base32 de Crockford y empezar por un valor de 0 a 7 (un primer carácter mayor superaría los 128 bits).

¿Los ID se guardan o se envían a algún sitio?

No. Se generan en tu navegador y desaparecen cuando sales de la página.