Convertir un nombre en base 62 en PHP

Broum -  
phpguru Messages postés 1 Statut Membre -
Bonjour,

Je cherche une fonction pour un nombre en base 62 en PHP.
Il existe la fonction base_convert() mais elle peut aller jusqu'à 36.
https://www.php.net/manual/fr/function.base-convert.php

Merci d'avance pour votre aide.

6 réponses

  1. Reivax962 Messages postés 3742 Statut Membre 1 011
     
    Bonjour,

    On peut coder ça assez facilement.
    Voici un exemple :
    // initialisation du tableau des caractères
    $tableauCaracteres = array();
    $i = 0;
    $lettreMin = 'a';
    $lettreMaj = 'A';
    while ($i < 10)  // Les chiffres
    	$tableauCaracteres[] = (string)$i++;
    while ($i < 36)  // Les minuscules
    {
    	$tableauCaracteres[] = $lettreMin;
    	$lettreMin++;
    	$i++;
    }
    while ($i < 62)  // Les majuscules
    {
    	$tableauCaracteres[] = $lettreMaj;
    	$lettreMaj++;
    	$i++;
    }
    
    // Fonction de conversion proprement dite
    function my_base_convert($valeur, $base)
    {
    	global $tableauCaracteres;
    	$resultat = "";
    	while($valeur >= $base)
    	{
    		$reste = $valeur % $base;	// Le reste de la division de $valeur par $base
    		$resultat = $tableauCaracteres[$reste].$resultat;
    		$valeur = $valeur / $base;
    	}
    	$resultat = $tableauCaracteres[$valeur].$resultat;
    	return $resultat;
    }
    


    Cette version peut convertir jusqu'à la base 62, car j'ai défini 62 caractères dans $tableauCaracteres. Mais il suffit de rajouter des valeurs au tableau pour pouvoir convertir dans des bases supérieures...
    Il faudrait également rajouter des garde-fous, du genre si $base > sizeof($tableau) blablabla.

    Ça me donne le résultat suivant pour la base 62 :
    5 -> 5
    32 -> w
    61 -> Z
    62 -> 10
    63 -> 11
    2515348421 -> 2Ke91

    Xavier
    5
    1. coeus Messages postés 3296 Statut Membre 120
       
      Impressionné je suis.
      C'est là que je m'en veux de ne pas avoir pris des cours de maths au cégep ! :-)
      0
  2. coeus Messages postés 3296 Statut Membre 120
     
    Bonjour Broum !

    C'est normal que ça n'aille pas plus haut que 36. Quels caractères voudrais-tu qui représentent les nombres de 36 à 62 ? De 10 à 36, on a les lettres de l'alphabet. Si on compte en base 36, ça donne :

    1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, [...] x, y, z, 10, 11, 12, [...] 1x, 1y, 1z, 20, 21, 22, et ainsi de suite. En base 62, ça donnerait quoi ?
    1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, [...] x, y, z, !, ", /, #, %, etc. ?

    Est-ce que c'est seulement pour convertir un nombre, ou pour effectuer un calcul en base 62 ? C'est très différent selon moi. Il faudra mettre un mathématicien là-dessus ! ;)
    0
  3. Broum
     
    Ah oui, j'ai oublier de préciser, les autres caractères sont les lettres en majuscules.

    Voici la chaîne de caractères à utiliser : 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

    J'en est besoin pour convertir un nombre afin de générer un ID court pour un script de sort d'URL.
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question