Como codificar e decodificar Base62
- Digite ou cole o texto em Entrada · Texto. A string Base62 aparece em Saída · Base62.
- Ajuste o Alfabeto abaixo da saída para combinar com o sistema com que você está falando: 0-9 A-Z a-z ou 0-9 a-z A-Z.
- Para um ID numérico, mude De para Inteiro (número grande) e digite o número em decimal. Para bytes brutos, escolha Hex ou Base64.
- Para decodificar, clique em Base62 → Texto no seletor de direção. A escolha do Alfabeto passa então para baixo da entrada, e precisa ser a mesma usada na codificação.
Duas ordens de alfabeto com resultados diferentes
O Base62 não tem RFC, e os 62 caracteres aparecem em duas ordens por aí. Este conversor oferece as duas:
| Alfabeto | Valor de A | Valor de a | Hello | 1000000 como número |
|---|---|---|---|---|
0-9 A-Z a-z | 10 | 36 | 5TP3P3v | 4C92 |
0-9 a-z A-Z | 36 | 10 | 5tp3p3V | 4c92 |
A primeira ordem segue a ordem ASCII, então strings codificadas de mesmo comprimento ficam ordenadas do mesmo jeito que os números. O GMP a usa para as bases de 37 a 62. A segunda ordem corresponde ao que você obtém ao estender o a-f minúsculo do hexadecimal; algumas bibliotecas a chamam de alfabeto “invertido”.
Cada saída é a outra com a caixa de todas as letras trocada. Isso torna o erro fácil de passar despercebido: decodificar 5tp3p3V com a ordem errada funciona, mas dá os bytes 4e 08 14 29 1d em vez de Hello. Se um valor decodificado parecer lixo, teste a outra ordem antes de desconfiar dos dados.
Base62 para IDs e URLs curtos
Encurtadores de URL e esquemas de ID usam Base62 porque todo caractere é seguro num caminho de URL, num nome de arquivo e numa seleção com duplo clique, e o resultado é curto. Um ID de banco de dados é um número, então codifique-o a partir de Inteiro (número grande):
| Decimal | Base62 (0-9A-Za-z) |
|---|---|
125 | 21 |
3843 | zz |
3844 | 100 |
1000000 | 4C92 |
123456789 | 8M0kX |
Sete caracteres cobrem números até 62^7 − 1, cerca de 3,5 trilhões. Para um ID aleatório, codifique bytes aleatórios: um UUID de 16 bytes vira 21 ou 22 caracteres, contra 32 em hex.
IDs sequenciais curtos revelam quantos registros existem e são fáceis de adivinhar. Se isso importa, codifique bytes aleatórios em vez de um contador.
Como o Base62 lida com bytes e zeros à esquerda
Como 62 não é potência de dois, o Base62 não consegue mapear grupos de bits em caracteres. Ele lê a entrada como um único número big-endian e converte esse número para base 62. Os bytes zero iniciais desapareceriam, então esta ferramenta escreve um dígito 0 para cada um deles: os bytes 00 00 viram 00, e 00 ff vira 047.
As bibliotecas também divergem aqui. Muitas codificam só o número e descartam os zeros à esquerda, e formatos de largura fixa completam até um comprimento definido. Se o lado receptor espera largura fixa, complete a saída à esquerda com 0. A abordagem de número grande também tem um custo que cresce com o quadrado do comprimento da entrada, então esta ferramenta limita a entrada Base62 a 64 KB.
Base62 em Python
O Python não tem Base62 na biblioteca padrão. Para IDs inteiros, a conversão cabe em poucas linhas:
ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
def b62encode(n: int) -> str:
if n == 0:
return ALPHABET[0]
out = ""
while n:
n, r = divmod(n, 62)
out = ALPHABET[r] + out
return out
def b62decode(s: str) -> int:
n = 0
for ch in s:
n = n * 62 + ALPHABET.index(ch)
return n
b62encode(1000000) # '4C92'
b62decode("8M0kX") # 123456789
Troque os dois blocos de letras em ALPHABET para usar a outra ordem. Para bytes, converta antes com int.from_bytes(data, "big"). Mais sobre manipulação de bytes em Python.
Perguntas frequentes
Qual é o alfabeto do Base62?
Os dez dígitos mais as 26 letras maiúsculas e as 26 minúsculas: 62 caracteres, nada mais. Os dígitos sempre vêm primeiro, mas as bibliotecas discordam se depois vêm as maiúsculas (0-9A-Za-z) ou as minúsculas (0-9a-zA-Z).
Qual a diferença entre Base62 e Base64?
O Base64 acrescenta + e / (ou - e _) e o preenchimento =, e mapeia grupos fixos de 6 bits. O Base62 usa só letras e dígitos, então não precisa de escape em lugar nenhum, mas 62 não é potência de dois, então ele precisa tratar os dados como um único número grande. A saída fica cerca de 1% mais longa que o Base64.
Como codificar um número em Base62?
Ajuste De em Inteiro (número grande) e digite o número decimal. 1000000 vira 4C92 com o alfabeto padrão. Codificar o número como texto codificaria os caracteres dos dígitos.
O Base62 diferencia maiúsculas de minúsculas?
Sim. A e a são dígitos diferentes, que valem 10 e 36 na ordem padrão. Um sistema que converte URLs ou IDs para minúsculas corrompe strings Base62; use Base36 se a caixa das letras puder se perder.