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:
- $input: String contendo o número a ser convertido.
- $inBase: Tamanho da base de entrada (<= 95).
- $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:
- $value: Valor a ser convertido.
- $inDigits: String contendo a base de entrada.
- $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:
- $input: Valor a ser convertido.
- $inBase: Tamanho da base de entrada (31, 54, 61, 71, 73, 80, 85, 95).
- $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:
- $input: Valor a ser convertido.
- $inBase: Tamanho da base de entrada (<= 95).
- $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);