AZ Tools

Decodificador ULID (marca de tiempo y aleatoriedad)

Desarrollo

Un ULID es un identificador de 26 caracteres ordenable lexicográficamente: los primeros 10 caracteres son una marca de tiempo de 48 bits en milisegundos y los últimos 16 son 80 bits de aleatoriedad, todo en Base32 de Crockford. Como el tiempo está en los bits altos, los ULID se ordenan en orden de creación — justo por eso la gente los usa en lugar de UUID aleatorios. Este decodificador separa un ULID: lee la marca de tiempo y la muestra como UTC ISO, un relativo «hace x» y milisegundos de época crudos, y muestra la parte aleatoria en Base32 de Crockford y en hex. La decodificación no distingue mayúsculas y es tolerante con los confusables clásicos de Crockford — I y L se leen como 1, O como 0 — y valida la longitud, el alfabeto y que la marca de tiempo no desborde los 48 bits (el primer carácter debe ser 0–7). Todo corre localmente; no se sube nada.

Canónico01ARZ3NDEKTSV4RRFFQ69G5FAV
Marca de tiempo (UTC)2016-07-30T23:54:10.259Z
Relativohace 9y 11mo
Época ms1469922850259
Aleatoriedad (Base32)TSV4RRFFQ69G5FAV
Aleatoriedad (hex)0xd6764c61efb99302bd5b

Primeros 10 = marca de 48 bits en ms, últimos 16 = 80 bits de aleatoriedad. Base32 de Crockford: I/L→1, O→0, sin distinguir mayúsculas.

Cómo usar

  1. Pega un ULID (26 caracteres, p. ej. 01ARZ3NDEKTSV4RRFFQ69G5FAV).
  2. Lee la marca de tiempo de creación (UTC, relativa y ms de época).
  3. Copia la marca de tiempo o la aleatoriedad en Crockford o hex según necesites.

Preguntas frecuentes

¿Cómo codifica el tiempo un ULID?
Los primeros 10 caracteres Base32 de Crockford guardan un conteo de 48 bits de milisegundos desde la época Unix (1970-01-01). 48 bits cubren fechas hasta el año 10889, así que el primer carácter solo puede ser 0–7; algo mayor desbordaría y se rechaza como inválido. Los 16 caracteres restantes son 80 bits de aleatoriedad.
¿Por qué la decodificación no distingue mayúsculas?
Los ULID usan Base32 de Crockford, diseñada para ser amigable: no distingue mayúsculas y trata las letras visualmente ambiguas I y L como 1 y O como 0. Esta herramienta las normaliza antes de decodificar, así que un ULID escrito en minúsculas o con una O en lugar de un cero se decodifica igualmente bien.
¿En qué se diferencia un ULID de un UUID?
Ambos son IDs de 128 bits, pero un ULID se codifica como 26 caracteres Base32 ordenables con la marca de tiempo en los bits altos, así que una lista de ULID ya está en orden de creación. Un UUID aleatorio (v4) no lleva tiempo y no se ordena de forma útil; el UUID v7 es la respuesta del estándar a la misma necesidad. Para esos usa el inspector de UUID.
¿Es exacta la marca de tiempo?
Sí — la marca de tiempo en milisegundos se guarda directamente en el ULID, así que la hora de creación es exacta al milisegundo, suponiendo que el reloj del generador fuera correcto. El tiempo relativo se calcula contra el reloj actual de tu dispositivo.

Herramientas relacionadas