Helper BaseConvert


1Présentation

Ce helper sert à convertir des bases. Cela peut être utile notamment pour créer des tokens cryptographiques.


2Utilisation

L'objet \Temma\Utils\BaseConvert propose plusieurs méthodes statiques, qui servent à convertir des nombres depuis une base numérique vers une autre.

Certaines méthodes attendent que leur soit fourni la composition de la base. Par exemple, pour une base hexadécimale classique (base 16), il s'agit de la chaîne de caractères 0123456789abcdef.

D'autres méthodes ont juste besoin de la taille de la base. La composition de la base elle-même sera alors un sous-ensemble de la base 95, qui est une base contenant les 95 caractères ASCII imprimables : 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^!/*?&<>()[]{}@%$#"',;\_`|~

Enfin, d'autres méthodes utilisent des bases "spéciales", qui sont des sous-ensembles spécifiques :

  • base 85 : Tous les caractères imprimables utilisable en ligne de commande sans échappement.
    0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^!/*?&<>()[]{}@%$#
  • base 84 : Dérivée de la base 84, à laquelle a été retiré le caractère deux-points (:), car il est souvent utilisé pour séparer les identifiants et les mots de passe.
    0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-+=^!/*?&<>()[]{}@%$#
  • base 80 : Dérivée de la base 85, à laquelle ont été retiré les caractères spéciaux en HTML (&<>?/).
    0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^!*()[]{}@%$#
  • base 79 : Dérivée de la base 80, à laquelle a été retiré le caractère deux-points (:), car il est souvent utilisé pour séparer les identifiants et les mots de passe.
    0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-+=^!*()[]{}@%$#
  • base 73 : Dérivée de la base 54, avec des caractères spéciaux supplémentaires.
    23456789abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ!#%()*+,-./:;=?@[]_
  • base 71 : Contient tous les caractères qui ne sont pas encodés dans une URL.
    0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!'()*-._~
  • base 70 : Dérivée de la base 71 (caractères non encodés dans les URL), sans le caractère apostrophe (').
    0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!()*-._~
  • base 64 : Dérivée de la base 62 (0-9a-zA-Z), avec les caractères '+' et '/'.
    0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/
  • base 61 : Dérivée de la base 71, sans les caractères similaires (0oO1ilIL!i~).
    23456789abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ'()*-._
  • base 60 : Dérivée de la base 61, sans le caractère apostrophe ('~).
    23456789abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ()*-._
  • base 54 : Dérivée de la base 62 (0-9a-zA-Z), sans les caractères similaires (0oO1iIlL).
    23456789abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ
  • base 31 : Dérivée de la base 36 (0-9a-z) sans les caractères similaires (0o1il).
    23456789abcdefghjkmnpqrstuvwxyz

3convert()

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

Paramètres :

  1. $input : Chaîne contenant le nombre à convertir.
  2. $inBase : Taille de la base en entrée (<= 95).
  3. $outBase : Taille de la base en sortie (<= 95).

Cette méthode convertit un nombre, depuis n'importe quelle base, vers n'importe quelle base. Les tailles des bases d'entrée et de sortie sont données en paramètres ; ces bases sont donc des sous-ensembles de la base 95.

Exemples :

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

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

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

4convertBase()

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

Paramètres :

  1. $value : Valeur à convertir.
  2. $inDigits : Chaîne contenant la base d'entrée.
  3. $outDigits : Chaîne contenant la base de sortie.

Cette méthode convertit un nombre, depuis n'importe quelle base, vers n'importe quelle base. Les caractères composant les bases d'entrée et de sortie sont donnés en paramètre.

Exemple :

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

// convertit le nombre "99" (base 10) en "iuo"
// (dans la base constituée des voyelles)
$res = TµBaseConvert::convertBase(99, '0123456789', 'aeiouy');

5convertFromSpecialBase()

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

Paramètres :

  1. $input : Valeur à convertir.
  2. $inBase : Taille de la base en entrée (31, 54, 61, 71, 73, 80, 85, 95).
  3. $outBase : Taille de la base en sortie (<= 95).

Cette méthode convertit un nombre depuis une base spéciale (cf. liste ci-dessus), vers n'importe quelle base sous-ensemble de la base 95.

Exemple :

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

// convertit le nombre "5d3t" (base 31)
// en "99999" (base 10)
$res = TµBaseConvert::convertFromSpecialBase('5d3t', 31, 10);

6convertToSpecialBase()

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

Paramètres :

  1. $input : Valeur à convertir.
  2. $inBase : Taille de la base en entrée (<= 95).
  3. $outBase : Taille de la base en sortie (31, 54, 61, 71, 73, 80, 85, 95).

Cette méthode convertit un nombre depuis n'importe quelle base (sous-ensemble de la base 95) vers une base spéciale (cf. liste ci-dessus).

Exemple :

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

// convertit le nombre "99999" (base 10)
// en "5d3t" (base 31)
$res = TµBaseConvert::convertToSpecialBase(99999, 10, 31);