Helper BaseConvert


1Presentación

Este helper se usa para convertir bases numéricas. Esto puede ser especialmente útil para crear tokens criptográficos.


2Uso

El objeto \Temma\Utils\BaseConvert ofrece varios métodos estáticos para convertir números de una base numérica a otra.

Algunos métodos esperan que se les proporcione la composición de la base. Por ejemplo, para una base hexadecimal clásica (base 16), esta cadena es 0123456789abcdef.

Otros métodos solo necesitan el tamaño de la base. La composición de la base en sí será entonces un subconjunto de la base 95, que es una base que contiene los 95 caracteres ASCII imprimibles: 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^!/*?&<>()[]{}@%$#"',;\_`|~

Por último, otros métodos usan bases "especiales", que son subconjuntos específicos:

  • base 85: Todos los caracteres imprimibles utilizables en la línea de comandos sin necesidad de escape.
    0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^!/*?&<>()[]{}@%$#
  • base 84: Derivada de la base 85, de la cual se ha eliminado el carácter de dos puntos (:), porque suele usarse para separar usuarios y contraseñas.
    0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-+=^!/*?&<>()[]{}@%$#
  • base 80: Derivada de la base 85, de la cual se han eliminado los caracteres especiales de HTML (&<>?/).
    0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^!*()[]{}@%$#
  • base 79: Derivada de la base 80, de la cual se ha eliminado el carácter de dos puntos (:), porque suele usarse para separar usuarios y contraseñas.
    0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-+=^!*()[]{}@%$#
  • base 73: Derivada de la base 54, con caracteres especiales adicionales.
    23456789abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ!#%()*+,-./:;=?@[]_
  • base 71: Contiene todos los caracteres que no se codifican en una URL.
    0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!'()*-._~
  • base 70: Derivada de la base 71 (todos los caracteres no codificados en una URL), sin el carácter de comilla simple (').
    0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!()*-._~
  • base 64: Derivada de la base 62 (0-9a-zA-Z), con los caracteres '+' y '/'.
    0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/
  • base 61: Derivada de la base 71, sin los caracteres similares (0oO1ilIL!i~).
    23456789abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ'()*-._
  • base 60: Derivada de la base 61, sin el carácter de comilla simple (').
    23456789abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ()*-._
  • base 54: Derivada de la base 62 (0-9a-zA-Z), sin caracteres similares (0oO1iIlL).
    23456789abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ
  • base 31: Derivada de la base 36 (0-9a-z), sin caracteres similares (0o1il).
    23456789abcdefghjkmnpqrstuvwxyz

3convert()

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

Parámetros:

  1. $input: Cadena que contiene el número a convertir.
  2. $inBase: Tamaño de la base de entrada (<= 95).
  3. $outBase: Tamaño de la base de salida (<= 95).

Este método convierte un número de cualquier base a cualquier base. Los tamaños de las bases de entrada y salida se indican como parámetros; estas bases son, por lo tanto, subconjuntos de la base 95.

Ejemplos:

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

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

// convierte "99999" (base 10) en "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 que se debe convertir.
  2. $inDigits: Cadena que contiene la base de entrada.
  3. $outDigits: Cadena que contiene la base de salida.

Este método convierte un número de cualquier base a cualquier base. Los caracteres que componen las bases de entrada y salida se indican como parámetros.

Ejemplo:

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

// convierte el número "99" (base 10) en "iuo"
// (en la base de las vocales)
$res = TµBaseConvert::convertBase(99, '0123456789', 'aeiouy');

5convertFromSpecialBase()

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

Parámetros:

  1. $input: Valor que se debe convertir.
  2. $inBase: Tamaño de la base de entrada (31, 54, 60, 61, 64, 70, 71, 73, 79, 80, 84, 85, 95).
  3. $outBase: Tamaño de la base de salida (<= 95).

Este método convierte un número de una base especial (ver la lista anterior) a cualquier base subconjunto de la base 95.

Ejemplo:

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

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

6convertToSpecialBase()

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

Parámetros:

  1. $input: Valor que se debe convertir.
  2. $inBase: Tamaño de la base de entrada (<= 95).
  3. $outBase: Tamaño de la base de salida (31, 54, 60, 61, 64, 70, 71, 73, 79, 80, 84, 85, 95).

Este método convierte un número de cualquier base (subconjunto de la base 95) a una base especial (ver la lista anterior).

Ejemplo:

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

// convierte el número "99999" (base 10)
// en "5d3t" (base 31)
$res = TµBaseConvert::convertToSpecialBase(99999, 10, 31);