1001Ferramentas
🔢Validadores

Validador de Base91

Verifica se uma string usa apenas caracteres Base91 (letras, dígitos e símbolos específicos como !#$%&()*+...). Não decodifica, apenas valida formato.

Base91: a codificação binário-texto compacta que empacota mais bytes por caractere que o Base64

Base91 é um esquema de codificação binário-para-texto criado por Joachim Henke por volta do ano 2000 como alternativa mais eficiente em espaço ao Base64. Usa um alfabeto de 91 caracteres construído a partir de caracteres ASCII imprimíveis, excluindo deliberadamente os três caracteres sensíveis a strings ", ' e \, de modo que a saída codificada pode ser inserida com segurança dentro de literais de string com aspas duplas, simples e com escape de barra invertida sem precisar de escaping.

A grande vantagem é densidade: enquanto o Base64 tem 33% de overhead, o Base91 fica em torno de 14% de overhead — cada 13 bytes de entrada produzem em média 16 caracteres de saída, razão 1,23x. Isso torna o Base91 atraente para embutir blobs binários em canais de texto com restrição de tamanho, arquivos de log, formatos de configuração e data URIs longas onde cada kilobyte conta.

Alfabeto, conjunto de caracteres e regex de validação

Os 91 caracteres cobrem A-Z, a-z, 0-9 e um conjunto curado de pontuação: !#$%&()*+,./:;<=>?@[]^_`{|}~". Uma regex prática de validação é ^[A-Za-z0-9!#$%&()*+,./:;<=>?@[\]^_`{|}~"]+$. Note que a codificação é case-sensitive e somente ASCII — strings Base91 nunca contêm whitespace, quebras de linha ou caracteres não-ASCII.

Como o alfabeto é denso e irregular, decodificar é mais caro do que Base64: implementações costumam usar aritmética com BigInt para converter blocos de caracteres de volta em bytes. Espere um decode Base91 mensuravelmente mais lento que Base64 para o mesmo payload.

Base91 vs Base64, Z85 e Base85 (Ascii85)

  • vs Base64: Base91 é cerca de 14% maior que a entrada binária vs 33% do Base64 — mais compacto, mas muito menos universal.
  • vs Z85 (ZeroMQ, RFC 32/Z85): alfabeto de 85 caracteres pensado para ser seguro em JSON e em código-fonte. Mais simples, saída ligeiramente maior, muito mais padronizado.
  • vs Base85 / Ascii85: usado pelo PostScript e PDF da Adobe; a RFC 1924 também definiu uma variante Ascii85 para representação textual de IPv6. Cerca de 25% de overhead.
  • Veredicto: Base91 ganha em densidade mas perde em ubiquidade. Use só quando os 14% de economia realmente importarem e você controlar codificador e decodificador.

Armadilhas comuns e onde o Base91 falha

  • Não é URL-safe: o alfabeto contém +, /, ?, =, & e # — todos reservados em URIs. Ainda é preciso percent-encoding em contextos de URL, o que corrói a vantagem de tamanho.
  • Não é universal: ao contrário do Base64, navegadores e bibliotecas padrão não trazem Base91 nativo. É preciso uma lib dedicada nas duas pontas.
  • Variante basE91: a grafia original de Henke é basE91; alguns forks (ex: iqlusion) usam alfabetos ligeiramente diferentes — confirme que os dois lados usam a mesma tabela.
  • Performance de decode: decodificadores baseados em BigInt são notavelmente mais lentos que a abordagem de lookup-table do Base64 para payloads grandes.
  • Ferramental limitado: entre desenvolvedores brasileiros e na maioria das comunidades, o Base91 tem adoção praticamente nula — codificação de nicho com ferramentas de nicho.

Bibliotecas e ecossistema

Para Node.js o pacote npm base91 é a implementação mais usada. Em Python o caminho é py-base91 ou o código C de referência linkado do site de Henke. Há ports comunitários para Go, Rust e Java, mas nenhum faz parte de biblioteca padrão — sempre pin uma versão específica e documente o alfabeto exato para evitar bugs de interoperabilidade.

FAQ

Como o Base91 se compara ao Base64?

Base91 é mais compacto — cerca de 14% de overhead vs 33% do Base64 — mas é muito menos universal. Base64 está embutido em praticamente toda linguagem e runtime; Base91 sempre exige uma lib extra.

Base91 é URL-safe?

Não. O alfabeto inclui +, /, =, ? e &, que são reservados em URIs. É preciso percent-encoding ao embutir a string em URLs, e esse overhead normalmente apaga a vantagem de tamanho.

Há suporte amplo de bibliotecas para Base91?

Não — é uma codificação de nicho. Existem libs funcionais para Node.js (base91), Python, C e algumas outras linguagens, mas não faz parte de nenhuma biblioteca padrão e o ferramental é limitado.

Quando o Base91 realmente vale a pena?

Quando você controla codificador e decodificador, os 14% de economia em relação ao Base64 importam (data URIs longas, arquivos de log, transmissão compacta) e o canal é texto-ASCII-safe mas não é URL. Caso contrário, fique com Base64.

Por que excluir apenas ", ' e \?

Esses três são os delimitadores e caracteres de escape mais comuns em literais de string de código-fonte. Ao excluí-los, strings Base91 podem ser embutidas diretamente em literais com aspas em quase qualquer linguagem de programação sem precisar de escaping adicional.

Ferramentas Relacionadas