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, 60, 61, 64, 70, 71, 73, 79, 80, 84, 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, 60, 61, 64, 70, 71, 73, 79, 80, 84, 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);