Convertir un nombre en base 62 en PHP
Broum
-
phpguru Messages postés 1 Statut Membre -
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.
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:
- Php base62
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Retour a la ligne php - Forum Webmastering
- Alert php - Forum PHP
- Retour a la ligne php ✓ - Forum PHP
6 réponses
Bonjour,
On peut coder ça assez facilement.
Voici un exemple :
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
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
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 ! ;)
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 ! ;)
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.
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.
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
$chaine % 62 dans $alphabet
$alphabet = 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
https://www.dcode.fr/conversion-base-n
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
http://geoffray.be/blog/php/convertir-des-nombres-en-base-62
C'est là que je m'en veux de ne pas avoir pris des cours de maths au cégep ! :-)