Saltar al contenido

Generador de KSUID - Crear Identificadores Únicos Ordenables

Genere Identificadores Únicos K-Ordenables (KSUIDs) en línea. Cree ID ordenables por tiempo y resistentes a colisiones para sistemas distribuidos y bases de datos al instante.

Generador KSUID

Calculadora de carga...
📚

Documentación

Generador de KSUID

Un KSUID (K-Sortable Unique Identifier, identificador único ordenable) es un código de 27 caracteres que sirve para etiquetar registros como filas de bases de datos, entradas de registro o solicitudes de API. Combina una marca de tiempo con datos aleatorios, de modo que los identificadores se ordenan aproximadamente por el momento en que se generaron y cada uno sigue siendo, a efectos prácticos, único. Esta herramienta genera un único KSUID en el navegador y permite copiarlo.

¿De qué se compone un KSUID?

Un KSUID mide 20 bytes y se divide en dos partes:

  • Marca de tiempo (4 bytes): el número de segundos transcurridos desde un punto de partida fijo llamado época KSUID.
  • Carga aleatoria (16 bytes): datos producidos por el generador de números aleatorios criptográfico del navegador.

Esos 20 bytes se convierten después en texto mediante la codificación base62, un sistema que representa los números con 62 caracteres: los dígitos 0-9, las letras mayúsculas A-Z y las letras minúsculas a-z. El resultado siempre se rellena hasta tener exactamente 27 caracteres, por ejemplo 0qjBBlJIfbVLKwnJn4xpLGDr00e.

Como la marca de tiempo va primero, dos KSUID creados con un segundo de diferencia se ordenarán normalmente igual que sus momentos de creación cuando se comparan como texto simple. El orden depende del reloj del equipo que los genera, así que no está estrictamente garantizado. Como los últimos 16 bytes son aleatorios, dos KSUID creados en el mismo segundo siguen siendo casi con seguridad distintos.

Época KSUID

La mayoría de los sistemas informáticos cuentan el tiempo en segundos desde el 1 de enero de 1970 (la «época Unix»). Los KSUID usan otro punto de partida, la época KSUID: 1.400.000.000 segundos después de la época Unix, un valor que la implementación de referencia eligió por ser fácil de recordar, y que corresponde al 13 de mayo de 2014, 16:53:20 UTC.

Un punto de partida más tardío permite que el campo de marca de tiempo de 4 bytes cubra más años útiles antes de agotarse; los autores del formato lo describen como una vida útil de más de 100 años. Un contador de 4 bytes (32 bits) puede contener como máximo 4.294.967.295 segundos. Contando desde la época KSUID, ese lapso se agota hacia el 19 de junio de 2150.

Fórmula del KSUID

Una cadena KSUID se construye en tres pasos.

  1. Halle el valor de la marca de tiempo:

    T = floor(current_unix_time_in_seconds) − 1,400,000,000

  2. Genere 16 bytes aleatorios, R, con un generador de números aleatorios criptográficamente seguro.

  3. Una la marca de tiempo de 4 bytes y los 16 bytes aleatorios en un bloque de 20 bytes, y codifique ese bloque en base62, rellenando el resultado hasta 27 caracteres:

    KSUID = Base62( T ‖ R )

Aquí ‖ significa «colocar una a continuación de la otra». Los bytes de la marca de tiempo van siempre primero, y eso es lo que hace que la cadena final se ordene correctamente por tiempo.

Ejemplo práctico

Suponga que la parte de marca de tiempo de un KSUID es 100000000. Como la época KSUID está 1.400.000.000 segundos después de la época Unix, esta marca de tiempo representa el 14 de julio de 2017, 02:40:00 UTC.

Combine esa marca de tiempo con la secuencia de 16 bytes 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 (usada aquí solo para que el ejemplo sea reproducible; un generador real usa bytes aleatorios) y la codificación base62 produce:

0qjBBlJIfbVLKwnJn4xpLGDr00e

Esa cadena tiene 27 caracteres, se compone solo de dígitos y letras, y puede usarse directamente en una URL o un nombre de archivo.

Cómo usar el generador de KSUID

  1. Abra la página del generador de KSUID.
  2. Seleccione el botón «Generate KSUID».
  3. La herramienta crea un KSUID nuevo con la hora actual y bytes aleatorios recién generados, y lo muestra en la página.
  4. Seleccione el botón «Copy KSUID» para copiar el valor al portapapeles.
  5. Seleccione «Reset» para borrar el resultado. Si vuelve a seleccionar «Generate KSUID», se crea uno nuevo.

Cada clic en «Generate KSUID» produce exactamente un identificador. Para crear varios KSUID, haga clic de nuevo en el botón por cada uno nuevo; la herramienta no incluye modo por lotes ni exportación a archivo.

El generador depende de la API Web Crypto incluida en los navegadores modernos. Si esa API no está disponible, la herramienta muestra un error en lugar de producir un identificador, porque un generador de números aleatorios que no sea criptográficamente seguro podría producir identificadores más fáciles de adivinar o que colisionen.

KSUID comparado con UUID

Un UUID (Universally Unique Identifier, identificador único universal) es un formato de identificador alternativo muy común. Los UUID de la versión 4 contienen 122 bits aleatorios y ninguna marca de tiempo, así que dos de ellos no indican cuál se creó primero. En su forma de texto habitual, un UUID tiene 36 caracteres: 32 dígitos hexadecimales en grupos separados por guiones.

Un KSUID se diferencia en tres aspectos:

  • Ordenable por tiempo. Sus bytes iniciales de marca de tiempo hacen que el orden alfabético simple de las cadenas KSUID también las ordene por momento de creación.
  • Más corto. Un KSUID tiene 27 caracteres, frente a 36 de un UUID estándar.
  • Sin separadores. Un UUID se escribe normalmente en formato «hexadecimal con guiones» (xxxxxxxx-xxxx-...); un KSUID no tiene ninguno.

Ambos formatos pueden generarse de forma independiente en equipos distintos sin consultar a un servidor central, por lo que los dos evitan el cuello de botella de un contador autoincremental en una base de datos compartida.

Preguntas frecuentes

¿Qué significa KSUID? K-Sortable Unique Identifier (identificador único ordenable por K). El formato lo creó Segment, que publica la implementación de referencia en Go.

¿Cuánto mide un KSUID? 27 caracteres, codificados en base62 (dígitos 0-9, letras mayúsculas y letras minúsculas).

¿Qué es la época KSUID? El 13 de mayo de 2014, 16:53:20 UTC, que está 1.400.000.000 segundos después de la época Unix estándar del 1 de enero de 1970.

¿Pueden colisionar dos KSUID? Es extremadamente improbable. Cada KSUID incluye 16 bytes aleatorios (128 bits), generados con un generador de números aleatorios criptográficamente seguro. Eso es 64 veces el espacio de números de los 122 bits aleatorios de un UUID de la versión 4. Incluso al generar muchos KSUID en el mismo segundo, la probabilidad de que dos coincidan por casualidad es astronómicamente pequeña.

¿Se puede recuperar la hora de creación a partir de un KSUID? Sí. Los primeros 4 bytes del valor decodificado son la marca de tiempo. Si se suma ese número de segundos a la época KSUID, se obtiene la hora de creación original.

¿Permite esta herramienta generar muchos KSUID a la vez? No. La herramienta genera un KSUID por cada clic en el botón «Generate KSUID». No hay campo de cantidad, campo de marca de tiempo personalizada ni función de exportación o descarga.

¿Es seguro incluir un KSUID en una URL? Sí. La codificación base62 usa solo dígitos y letras, así que un KSUID no necesita ningún escape adicional para aparecer en una URL, un nombre de archivo o una clave de base de datos.

Referencias

  1. Segment. ksuid: K-Sortable Globally Unique IDs (README). github.com/segmentio/ksuid — estructura de 20 bytes, texto base62 de 27 caracteres, época de mayo de 2014 con más de 100 años de vida útil, 128 bits aleatorios, ordenación temporal aproximada.
  2. Segment. ksuid.go. código fuente de la implementación de referencia — constante de época 1400000000 ("14e8").
  3. IETF. RFC 9562: Universally Unique IDentifiers (UUIDs). rfc-editor.org — formato de texto hexadecimal con guiones y los 122 bits aleatorios de un UUID de la versión 4.