Codificador e decodificador Crockford Base32

Converta texto, bytes em hex ou arquivos para o Base32 de Douglas Crockford e vice-versa. O decodificador perdoa erros de digitação: ignora maiúsculas, minúsculas e hífens e lê O como 0 e I ou L como 1.

Funciona inteiramente no seu navegador. Nada é enviado.

Como usar

  1. Escolha Codificar para transformar texto em Crockford Base32 ou Decodificar para transformá-lo de volta em texto.
  2. Mantenha a Variante Crockford selecionada e confira se o Preenchimento está desativado. Ative Minúsculas para obter saída em minúsculas.
  3. Digite ou cole a entrada, ou abra um arquivo. Na decodificação, hífens e espaços são ignorados.
  4. Copie o resultado ou baixe-o como arquivo.

O que é Crockford Base32?

Douglas Crockford criou este alfabeto Base32 para identificadores que as pessoas leem, digitam e falam em voz alta. Ele usa os dez dígitos e 22 letras maiúsculas: 0123456789ABCDEFGHJKMNPQRSTVWXYZ. As letras I e L ficam de fora porque se parecem com o dígito 1, o O porque se parece com 0, e o U para reduzir a chance de formar palavrões por acidente.

Cada símbolo carrega 5 bits, então 5 bytes viram 8 caracteres, exatamente como no Base32 da RFC 4648. Os símbolos estão em ordem ASCII crescente, de modo que strings sem preenchimento e na mesma caixa de letras são ordenadas na mesma ordem que os dados que codificam. A especificação de Crockford não usa preenchimento, então mantenha a opção Preenchimento desativada.

Decodificação tolerante

A especificação de Crockford pede que os decodificadores aceitem o que as pessoas realmente digitam, e esta ferramenta faz isso:

  • Letras maiúsculas e minúsculas são tratadas da mesma forma.
  • A letra O é lida como o dígito 0, e as letras I e L são lidas como 1.
  • Os hífens, que podem ser inseridos para facilitar a leitura de códigos longos, são ignorados, assim como espaços e quebras de linha.

A letra U não é válida e é informada junto com a sua posição.

Bytes, números e ULID

Crockford descreve sua codificação em termos de números, enquanto esta ferramenta codifica uma sequência de bytes em grupos de 5 bits, à maneira da RFC 4648, usando os símbolos de Crockford. Quando o número de bits não é múltiplo de 5, as implementações baseadas em números colocam os bits zero excedentes no início e esta ferramenta os coloca no final, então os resultados podem ser diferentes.

O ULID é um exemplo comum. Ele usa o alfabeto de Crockford, mas codifica seu valor de 128 bits como um número em 26 caracteres, por isso os 16 bytes de um ULID não resultam na mesma string aqui, e decodificar um ULID gera bytes deslocados em dois bits. O símbolo de verificação opcional da especificação de Crockford, um caractere extra com o valor módulo 37, não é suportado: esta ferramenta não o adiciona nem o verifica.

Especificação

Alfabeto0-9 A-Z sem I L O U
Tamanho da saída8 caracteres a cada 5 bytes (160%)
PreenchimentoNenhum
PadrãoCrockford Base32 (2002)
Diferencia maiúsculas e minúsculasNão

Exemplos

Entrada (UTF-8)Saída
Hello, World!91JPRV3F5GG5EVVJDHJ22
Base64.is89GQ6S9P6GQ6JWR
你好WJYT1SD5QM

Perguntas frequentes

O Crockford Base32 diferencia maiúsculas de minúsculas?

Não. A saída fica em maiúsculas por padrão, e a opção Minúsculas a muda para minúsculas. O decodificador aceita as duas formas, mesmo misturadas na mesma string.

Por que I, L, O e U não estão no alfabeto?

I e L são facilmente confundidos com 1, e O com 0, então ficam de fora e são lidos como esses dígitos na decodificação. O U é excluído para que códigos aleatórios tenham menos chance de formar palavras ofensivas em inglês.

Esta ferramenta suporta o símbolo de verificação de Crockford?
Não. A especificação permite um caractere extra opcional com uma soma de verificação módulo 37, que usa os símbolos adicionais * ~ $ = U. Esta ferramenta não o adiciona nem o verifica, então remova o símbolo de verificação antes de decodificar.
Posso decodificar um ULID aqui?

Não nos seus 16 bytes exatos. O ULID codifica seus 128 bits como um único número, com os bits excedentes no início, enquanto esta ferramenta trabalha com grupos de bytes e os coloca no final. Use uma biblioteca de ULID para ler o carimbo de data/hora e a parte aleatória.