Comment utiliser le convertisseur Base36
- Tapez du texte dans Entrée · Texte. Ses octets UTF-8 sont encodés et le résultat apparaît dans Sortie · Base36.
- Choisissez minuscules ou MAJUSCULES sous Casse, sous la sortie. Les deux se décodent de la même façon.
- Pour convertir un nombre, réglez De sur Entier (grand nombre) et tapez la valeur décimale. Remettez Vers sur Base36 si vous l’aviez changé.
- Pour décoder, cliquez sur Base36 → Texte dans le sélecteur de sens, ou réglez Vers sur Entier (grand nombre) pour obtenir du décimal.
Base36 en décimal et inversement
Base36 compte avec 0–9 puis a–z : a vaut 10 et z vaut 35. Chaque position vaut 36 fois celle de sa droite :
| Base36 | Décimal | Remarque |
|---|---|---|
z | 35 | Le plus grand chiffre unique |
10 | 36 | |
zz | 1295 | 35 × 36 + 35 |
1000 | 46656 | 36³ |
21i3v9 | 123456789 | |
2gosa7pa2gv | 9007199254740991 | Number.MAX_SAFE_INTEGER en JavaScript |
3w5e11264sgsf | 18446744073709551615 | 2^64 − 1 |
Le convertisseur travaille avec BigInt : les valeurs sur 64 et 128 bits sortent donc exactes. Sa limite est de 64 Ko d’entrée, bien plus que n’importe quel identifiant.
Où Base36 est utilisé
Base36 convient aux identifiants qui doivent être courts et survivre à des systèmes qui changent la casse : URL que certains logiciels passent en minuscules, systèmes de fichiers insensibles à la casse, codes lus à voix haute ou recopiés depuis du papier. Les identifiants de posts et de commentaires de Reddit en sont un exemple. La plupart des langages de programmation savent aussi lire des nombres en Base36 sans bibliothèque.
Par rapport aux autres options, Base36 sacrifie un peu de densité pour être insensible à la casse. 16 octets aléatoires font 24 ou 25 caractères en Base36, 21 ou 22 en Base62 et 32 en hex. Base62 est plus court mais sensible à la casse, et Base32 est lui aussi insensible à la casse, mais fige l’alphabet en groupes de 5 bits et ajoute du remplissage.
Texte, octets et zéros de tête
Pour le texte et les autres octets, le convertisseur lit l’entrée comme un seul nombre big-endian et écrit ce nombre en base 36. Hello correspond aux octets 48 65 6c 6c 6f, au nombre 310939249775, et en Base36 à 3yud78mn. Les octets nuls de tête disparaîtraient dans un simple nombre : chacun est donc écrit sous la forme d’un chiffre 0. Les octets 00 0a s’encodent en 0a.
Une entrée Entier (grand nombre) n’a pas ce problème, car un nombre décimal n’a pas d’octets nuls de tête à perdre.
Base36 en JavaScript et en Python
Les deux langages convertissent les nombres nativement :
(255).toString(36); // '73'
parseInt("73", 36); // 255
(2n ** 64n - 1n).toString(36) // '3w5e11264sgsf'
BigInt sait s’afficher en base 36 mais n’a pas d’analyseur pour cette base, et parseInt perd en précision au-delà de 2^53. Une courte boucle règle le problème :
function parseBase36(s) {
let n = 0n;
for (const ch of s.toLowerCase()) n = n * 36n + BigInt(parseInt(ch, 36));
return n;
}
parseBase36("3w5e11264sgsf"); // 18446744073709551615n
int() de Python prend une base et fonctionne quelle que soit la taille : int("3w5e11264sgsf", 36) renvoie 18446744073709551615. Il n’y a pas de fonction intégrée pour l’autre sens ; une boucle divmod avec l’alphabet 0123456789abcdefghijklmnopqrstuvwxyz s’en charge. D’autres méthodes se trouvent sur les pages JavaScript et Python.
Problèmes courants
- Erreur sur un
-, un_ou une espace dans la valeur. Base36 ne contient que des chiffres et des lettres. Retirez les séparateurs, ou coupez la valeur à ces endroits s’ils séparent plusieurs identifiants. - Le texte décodé est illisible. La chaîne était probablement un identifiant numérique, pas du texte encodé. Réglez Vers sur Entier (grand nombre) pour la voir comme un nombre.
- De petites différences dans les derniers chiffres dans un tableur ou du JSON. Le nombre est passé par un double quelque part. Gardez les grands identifiants sous forme de chaînes de bout en bout.
FAQ
Comment convertir du Base36 en décimal ?
Réglez De sur Base36 et Vers sur Entier (grand nombre), puis collez la valeur Base36. zz donne 1295 et 3w5e11264sgsf donne 18446744073709551615, le plus grand nombre non signé sur 64 bits.
Base36 est-il sensible à la casse ?
Non. Les lettres majuscules et minuscules ont la même valeur : ZZ et zz valent tous deux 1295. Cela fait de Base36 l’encodage courant le plus dense qui résiste aux changements de casse.
Pourquoi parseInt de JavaScript donne-t-il un autre nombre ?
parseInt(s, 36) renvoie un double, exact seulement jusqu’à 2^53. parseInt("3w5e11264sgsf", 36) renvoie 18446744073709552000, soit 385 d’écart. Lisez plutôt la valeur dans un BigInt, comme le montre cette page.
Pourquoi le Base36 de Hello n'est-il pas égal à parseInt('Hello', 36) ?
L’encodeur transforme les cinq octets du texte en un nombre et l’écrit en base 36 (3yud78mn). parseInt lit au contraire les lettres H-e-l-l-o comme des chiffres Base36, ce qui donne 29234652.