Convertir un nombre en base 62 en PHP

Fermé
Broum - 16 nov. 2010 à 13:12
phpguru Messages postés 1 Date d'inscription jeudi 23 juin 2011 Statut Membre Dernière intervention 23 juin 2011 - 23 juin 2011 à 11:59
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.
A voir également:

6 réponses

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
17 nov. 2010 à 14:24
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
coeus Messages postés 3019 Date d'inscription samedi 13 janvier 2007 Statut Membre Dernière intervention 19 juin 2013 119
17 nov. 2010 à 14:38
Impressionné je suis.
C'est là que je m'en veux de ne pas avoir pris des cours de maths au cégep ! :-)
0
coeus Messages postés 3019 Date d'inscription samedi 13 janvier 2007 Statut Membre Dernière intervention 19 juin 2013 119
16 nov. 2010 à 15:38
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
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
Personne ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
$chaine * rang($lettre)
$chaine % 62 dans $alphabet

$alphabet = 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

https://www.dcode.fr/conversion-base-n
0
phpguru Messages postés 1 Date d'inscription jeudi 23 juin 2011 Statut Membre Dernière intervention 23 juin 2011
23 juin 2011 à 11:59
Bonjour, voici un bon article résumant bien la situation et qui répondra à vos questions :

http://geoffray.be/blog/php/convertir-des-nombres-en-base-62
-1