Helper BaseConvert


1Apresentação

Este helper é usado para converter números entre bases numéricas. Isso pode ser especialmente útil para criar tokens criptográficos.


2Uso

O objeto \Temma\Utils\BaseConvert oferece vários métodos estáticos para converter números de uma base numérica para outra.

Alguns métodos esperam que a composição da base seja fornecida. Por exemplo, para uma base hexadecimal clássica (base 16), essa string é 0123456789abcdef.

Outros métodos precisam apenas do tamanho da base. A composição da base em si será então um subconjunto da base 95, que é uma base contendo todos os 95 caracteres ASCII imprimíveis: 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^!/*?&<>()[]{}@%$#"',;\_`|~

Por fim, outros métodos usam bases "especiais", que são subconjuntos específicos:

  • base 85: Todos os caracteres imprimíveis utilizáveis na linha de comando sem escape.
    0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^!/*?&<>()[]{}@%$#
  • base 84: Derivada da base 85, da qual foi removido o caractere de dois-pontos (:), pois ele é frequentemente usado para separar logins e senhas.
    0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-+=^!/*?&<>()[]{}@%$#
  • base 80: Derivada da base 85, da qual foram removidos os caracteres especiais de HTML (&<>?/).
    0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^!*()[]{}@%$#
  • base 79: Derivada da base 80, da qual foi removido o caractere de dois-pontos (:), pois ele é frequentemente usado para separar logins e senhas.
    0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-+=^!*()[]{}@%$#
  • base 73: Derivada da base 54, com caracteres especiais adicionais.
    23456789abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ!#%()*+,-./:;=?@[]_
  • base 71: Contém todos os caracteres que não são codificados em uma URL.
    0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!'()*-._~
  • base 70: Derivada da base 71 (todos os caracteres não codificados em uma URL), sem o caractere de apóstrofo (').
    0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!()*-._~
  • base 64: Derivada da base 62 (0-9a-zA-Z), com os caracteres '+' e '/'.
    0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/
  • base 61: Derivada da base 71, sem os caracteres similares (0oO1ilIL!i~).
    23456789abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ'()*-._
  • base 60: Derivada da base 61, sem o caractere de apóstrofo (').
    23456789abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ()*-._
  • base 54: Derivada da base 62 (0-9a-zA-Z), sem caracteres similares (0oO1iIlL).
    23456789abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ
  • base 31: Derivada da base 36 (0-9a-z), sem caracteres similares (0o1il).
    23456789abcdefghjkmnpqrstuvwxyz

3convert()

convert(string $input, int $inBase, int $outBase) : string

Parâmetros:

  1. $input: String contendo o número a ser convertido.
  2. $inBase: Tamanho da base de entrada (<= 95).
  3. $outBase: Tamanho da base de saída (<= 95).

Este método converte um número de qualquer base para qualquer base. Os tamanhos das bases de entrada e saída são fornecidos como parâmetros; essas bases são, portanto, subconjuntos da base 95.

Exemplos:

use \Temma\Utils\BaseConvert as TµBaseConvert;

// converte "255" (base 10) em "ff" (base 16)
$res = TµBaseConvert::convert('255', 10, 16);

// converte "99999" (base 10) em "b7X" (base 95)
$res = TµBaseConvert::convert('99999', 10, 95);

4convertBase()

convertBase(int|string $value, string $inDigits, string $outDigits) : string

Parâmetros:

  1. $value: Valor a ser convertido.
  2. $inDigits: String contendo a base de entrada.
  3. $outDigits: String contendo a base de saída.

Este método converte um número de qualquer base para qualquer base. Os caracteres que compõem as bases de entrada e saída são fornecidos como parâmetros.

Exemplo:

use \Temma\Utils\BaseConvert as TµBaseConvert;

// converte o número "99" (base 10) em "iuo"
// (na base das vogais)
$res = TµBaseConvert::convertBase(99, '0123456789', 'aeiouy');

5convertFromSpecialBase()

convertFromSpecialBase(string $input, int $inBase, int $outBase) : string

Parâmetros:

  1. $input: Valor a ser convertido.
  2. $inBase: Tamanho da base de entrada (31, 54, 61, 71, 73, 80, 85, 95).
  3. $outBase: Tamanho da base de saída (<= 95).

Este método converte um número de uma base especial (veja a lista acima), para qualquer base subconjunto da base 95.

Exemplo:

use \Temma\Utils\BaseConvert as TµBaseConvert;

// converte o número "5d3t" (base 31)
// em "99999" (base 10)
$res = TµBaseConvert::convertFromSpecialBase('5d3t', 31, 10);

6convertToSpecialBase()

convertToSpecialBase(string $input, int $inBase, int $outBase) : string

Parâmetros:

  1. $input: Valor a ser convertido.
  2. $inBase: Tamanho da base de entrada (<= 95).
  3. $outBase: Tamanho da base de saída (31, 54, 61, 71, 73, 80, 85, 95).

Este método converte um número de qualquer base (subconjunto da base 95) para uma base especial (veja a lista acima).

Exemplo:

use \Temma\Utils\BaseConvert as TµBaseConvert;

// converte o número "99999" (base 10)
// em "5d3t" (base 31)
$res = TµBaseConvert::convertToSpecialBase(99999, 10, 31);