Cómo usar el convertidor Base36
- Escribe texto en Entrada · Texto. Sus bytes UTF-8 se codifican y el resultado aparece en Salida · Base36.
- Elige minúsculas o MAYÚSCULAS en Mayúsc./minúsc. bajo la salida. Ambas se decodifican igual.
- Para convertir un número, pon De en Entero (número grande) y escribe el valor decimal. Vuelve a poner A en Base36 si lo cambiaste.
- Para decodificar, haz clic en Base36 → Texto en el selector de dirección, o pon A en Entero (número grande) para obtener el decimal.
De Base36 a decimal y viceversa
Base36 cuenta con 0–9 y luego a–z, así que a vale 10 y z vale 35. Cada posición vale 36 veces la de su derecha:
| Base36 | Decimal | Nota |
|---|---|---|
z | 35 | El mayor dígito |
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 |
El convertidor trabaja con BigInt, así que los valores de 64 y 128 bits salen exactos. Su límite son 64 KB de entrada, mucho más que cualquier identificador.
Dónde se usa Base36
Base36 va bien para identificadores que deben ser cortos y sobrevivir a sistemas que cambian las mayúsculas: URLs que algún software pasa a minúsculas, sistemas de archivos que no distinguen mayúsculas y códigos que se leen en voz alta o se teclean desde un papel. Los identificadores de publicaciones y comentarios de Reddit son un ejemplo. La mayoría de los lenguajes de programación también pueden leer números Base36 sin bibliotecas.
Frente a las alternativas, Base36 renuncia a algo de densidad a cambio de no distinguir mayúsculas. 16 bytes aleatorios son 24 o 25 caracteres en Base36, 21 o 22 en Base62 y 32 en hex. Base62 es más corto, pero distingue mayúsculas, y Base32 tampoco las distingue, pero fija el alfabeto en grupos de 5 bits y añade relleno.
Texto, bytes y ceros a la izquierda
Para texto y otros bytes, el convertidor lee la entrada como un único número big-endian y escribe ese número en base 36. Hello son los bytes 48 65 6c 6c 6f, el número 310939249775, y en Base36 3yud78mn. Los bytes cero iniciales desaparecerían en un número puro, así que cada uno se escribe como un dígito 0: los bytes 00 0a se codifican como 0a.
Una entrada Entero no tiene el problema de los ceros iniciales, porque un número decimal no tiene bytes cero iniciales que perder.
Base36 en JavaScript y Python
Ambos lenguajes convierten números de forma nativa:
(255).toString(36); // '73'
parseInt("73", 36); // 255
(2n ** 64n - 1n).toString(36) // '3w5e11264sgsf'
BigInt puede imprimir en base 36, pero no tiene un parser para ella, y parseInt pierde precisión más allá de 2^53. Un bucle corto lo resuelve:
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 acepta una base y funciona con cualquier tamaño: int("3w5e11264sgsf", 36) devuelve 18446744073709551615. No hay función integrada para la dirección contraria; la resuelve un bucle con divmod y el alfabeto 0123456789abcdefghijklmnopqrstuvwxyz. Hay más patrones en las páginas de JavaScript y Python.
Problemas habituales
- Error en un
-,_o espacio dentro del valor. Base36 solo tiene dígitos y letras. Quita los separadores, o divide el valor por ellos si separan varios identificadores. - El texto decodificado es basura. Probablemente la cadena era un identificador numérico, no texto codificado. Pon A en Entero (número grande) para verlo como número.
- Pequeñas diferencias en las últimas cifras en una hoja de cálculo o un JSON. El número pasó por un double en algún punto. Mantén los identificadores grandes como cadenas de principio a fin.
Preguntas frecuentes
¿Cómo convierto Base36 a decimal?
Pon De en Base36 y A en Entero (número grande), y pega el valor Base36. zz da 1295 y 3w5e11264sgsf da 18446744073709551615, el mayor número de 64 bits sin signo.
¿Base36 distingue mayúsculas de minúsculas?
No. Las letras mayúsculas y minúsculas tienen el mismo valor, así que ZZ y zz son ambos 1295. Eso hace de Base36 la codificación habitual más densa que sobrevive a los cambios de mayúsculas.
¿Por qué parseInt de JavaScript da otro número?
parseInt(s, 36) devuelve un double, que solo es exacto hasta 2^53. parseInt("3w5e11264sgsf", 36) devuelve 18446744073709552000, con 385 de diferencia. Conviértelo a BigInt, como se muestra en esta página.
¿Por qué el Base36 de Hello no coincide con parseInt('Hello', 36)?
El codificador convierte los cinco bytes del texto en un número y lo escribe en base 36 (3yud78mn). parseInt, en cambio, lee las letras H-e-l-l-o como dígitos Base36, lo que da 29234652.