Pular para o conteúdo

Gerador de KSUID - Crie Identificadores Únicos Ordenáveis

Gere Identificadores Únicos K-Ordenáveis (KSUIDs) online. Crie IDs ordenáveis por tempo e resistentes a colisões para sistemas distribuídos e bancos de dados instantaneamente.

Gerador de KSUID

Calculadora de carregamento...
📚

Documentação

Gerador de KSUID

Um KSUID (K-Sortable Unique Identifier, ou identificador único ordenável por K) é um código de 27 caracteres usado para identificar registros, como linhas de banco de dados, entradas de log ou requisições de API. Ele combina um carimbo de data e hora com dados aleatórios, de modo que os IDs se ordenam aproximadamente pela hora de geração e cada um continua sendo, na prática, único. Esta ferramenta gera um único KSUID no navegador e permite copiá-lo.

De que é formado um KSUID?

Um KSUID tem 20 bytes de comprimento, divididos em duas partes:

  • Carimbo de data e hora (4 bytes): o número de segundos desde um ponto de partida fixo chamado época do KSUID.
  • Carga aleatória (16 bytes): dados produzidos pelo gerador de números aleatórios criptográfico do navegador.

Esses 20 bytes são então convertidos em texto por meio da codificação base62, um sistema que representa números com 62 caracteres: os dígitos 0-9, as letras maiúsculas de A a Z e as letras minúsculas de a a z. O resultado é sempre preenchido até exatamente 27 caracteres, por exemplo 0qjBBlJIfbVLKwnJn4xpLGDr00e.

Como o carimbo de data e hora vem primeiro, dois KSUIDs gerados com um segundo de diferença normalmente se ordenam, quando comparados como texto simples, na mesma ordem em que foram criados. A ordenação depende do relógio do computador que gera o ID, portanto não é uma garantia estrita. Como os últimos 16 bytes são aleatórios, dois KSUIDs gerados no mesmo segundo ainda assim são quase certamente diferentes.

Época do KSUID

A maioria dos sistemas de computação conta o tempo em segundos desde 1 de janeiro de 1970 (a "época Unix"). Os KSUIDs usam outro ponto de partida, a época do KSUID: 1.400.000.000 segundos após a época Unix, um valor que a implementação de referência escolheu por ser fácil de lembrar, e que corresponde a 13 de maio de 2014, 16:53:20 UTC.

Usar um ponto de partida mais recente permite que o campo de carimbo de 4 bytes cubra mais anos úteis antes de esgotar o espaço; os autores do formato descrevem isso como mais de 100 anos de vida útil. Um contador de 4 bytes (32 bits) comporta no máximo 4.294.967.295 segundos. Contando a partir da época do KSUID, esse intervalo se esgota por volta de 19 de junho de 2150.

Fórmula do KSUID

Uma string KSUID é montada em três etapas.

  1. Encontre o valor do carimbo de data e hora:

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

  2. Gere 16 bytes aleatórios, R, usando um gerador de números aleatórios criptograficamente seguro.

  3. Junte o carimbo de 4 bytes e os 16 bytes aleatórios em um único bloco de 20 bytes e codifique esse bloco em base62, preenchendo o resultado até 27 caracteres:

    KSUID = Base62( T ‖ R )

Aqui, ‖ significa "colocar um depois do outro". Os bytes do carimbo vêm sempre primeiro, e é isso que faz a string final se ordenar corretamente pelo tempo.

Exemplo prático

Suponha que a parte do carimbo de data e hora de um KSUID seja 100000000. Como a época do KSUID fica 1.400.000.000 segundos após a época Unix, esse carimbo representa 14 de julho de 2017, 02:40:00 UTC.

Combine esse carimbo com a sequência de 16 bytes 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 (usada aqui apenas para que o exemplo seja reproduzível; um gerador real usa bytes aleatórios) e a codificação base62 produz:

0qjBBlJIfbVLKwnJn4xpLGDr00e

Essa string tem 27 caracteres, é formada apenas por dígitos e letras e pode ser usada diretamente em uma URL ou em um nome de arquivo.

Como usar a ferramenta geradora de KSUID

  1. Abra a página do gerador de KSUID.
  2. Selecione o botão "Gerar KSUID".
  3. A ferramenta cria um novo KSUID com a hora atual e bytes aleatórios novos e o exibe na página.
  4. Selecione o botão "Copiar KSUID" para copiar o valor para a área de transferência.
  5. Selecione "Redefinir" para limpar o resultado. Selecionar "Gerar KSUID" de novo cria um novo.

Cada clique em "Gerar KSUID" produz exatamente um identificador. Para criar vários KSUIDs, clique no botão outra vez para cada novo; a ferramenta não tem modo em lote nem exportação para arquivo.

O gerador usa a Web Crypto API, integrada aos navegadores modernos. Se essa API não estiver disponível, a ferramenta mostra um erro em vez de produzir um ID, pois um gerador de números aleatórios que não seja criptograficamente seguro poderia produzir identificadores mais fáceis de adivinhar ou que colidam.

KSUID comparado ao UUID

Um UUID (Universally Unique Identifier, ou identificador único universal) é um formato de identificador alternativo bastante comum. Os UUIDs da versão 4 trazem 122 bits aleatórios e nenhum carimbo de data e hora, de modo que dois deles não indicam qual foi criado primeiro. Na forma textual usual, um UUID tem 36 caracteres: 32 dígitos hexadecimais em grupos separados por hifens.

Um KSUID difere em três aspectos:

  • Ordenável por tempo. Os bytes iniciais do carimbo fazem com que a ordenação alfabética simples das strings KSUID também as ordene pela hora de criação.
  • Mais curto. Um KSUID tem 27 caracteres, contra 36 de um UUID padrão.
  • Sem separadores. Um UUID costuma ser escrito no formato "hexadecimal com hifens" (xxxxxxxx-xxxx-...); um KSUID não tem hifens.

Os dois formatos podem ser gerados de forma independente em computadores diferentes, sem consultar um servidor central, e por isso ambos evitam o gargalo de um contador autoincremental em um banco de dados compartilhado.

Perguntas frequentes

O que significa KSUID? K-Sortable Unique Identifier (identificador único ordenável por K). O formato foi criado pela Segment, que publica a implementação de referência em Go.

Qual é o comprimento de um KSUID? 27 caracteres, codificados em base62 (dígitos 0-9, letras maiúsculas e letras minúsculas).

O que é a época do KSUID? 13 de maio de 2014, 16:53:20 UTC, que corresponde a 1.400.000.000 segundos após a época Unix padrão de 1 de janeiro de 1970.

Dois KSUIDs podem colidir? É extremamente improvável. Cada KSUID inclui 16 bytes aleatórios (128 bits), gerados com um gerador de números aleatórios criptograficamente seguro. Isso equivale a 64 vezes o espaço de números dos 122 bits aleatórios de um UUID da versão 4. Mesmo gerando muitos KSUIDs no mesmo segundo, a chance de dois coincidirem por acaso é astronomicamente pequena.

É possível recuperar a hora de criação a partir de um KSUID? Sim. Os primeiros 4 bytes do valor decodificado são o carimbo de data e hora. Somar esse número de segundos à época do KSUID dá a hora de criação original.

Esta ferramenta permite gerar vários KSUIDs de uma vez? Não. A ferramenta gera um KSUID a cada clique no botão "Gerar KSUID". Não há campo de quantidade, campo de carimbo de data e hora personalizado nem recurso de exportação ou download.

Um KSUID é seguro para usar em uma URL? Sim. A codificação base62 usa apenas dígitos e letras, portanto um KSUID não precisa de nenhum escape adicional para aparecer em uma URL, em um nome de arquivo ou em uma chave de banco de dados.

Referências

  1. Segment. ksuid: K-Sortable Globally Unique IDs (README). github.com/segmentio/ksuid — formato de 20 bytes, texto base62 de 27 caracteres, época de maio de 2014 com mais de 100 anos de vida útil, 128 bits aleatórios, ordenação temporal aproximada.
  2. Segment. ksuid.go. código-fonte da implementação de referência — constante da época 1400000000 ("14e8").
  3. IETF. RFC 9562: Universally Unique IDentifiers (UUIDs). rfc-editor.org — formato textual hexadecimal com hifens e os 122 bits aleatórios de um UUID da versão 4.