Yoone - 2 months ago 17
PHP Question

# Convertions between decimal and base 36

I want to convert numbers in base 36 using PHP. The function

`base_convert`
is not working because I want to convert large numbers: I don't get my initial number if I convert it again from base 36 to decimal.

I tried some function given on multiple websites, but I never get the same result. Also, these two websites (in Javascript) give the same result:

For example
`1010701001118000000000000000`
has to be converted to
`3IZS0ZE1RQ68W8SSW4`
.

Here are the functions I tried (and which don't work):

Here are two simple functions using an algorithm found on Wikipedia, while using bcmath to get the calculations even for very large numbers right:

``````function fromDecimalToBase(\$in, \$to) {
\$in = (string) \$in;
\$out = '';

for (\$i = strlen(\$in) - 1; \$i >= 0; \$i--) {
\$out = base_convert(bcmod(\$in, \$to), 10, \$to) . \$out;
\$in = bcdiv(\$in, \$to);
}

return preg_replace('/^0+/', '', \$out);
}

function fromBaseToDecimal(\$in, \$from) {
\$in = (string) \$in;
\$out = '';

for (\$i = 0, \$l = strlen(\$in); \$i < \$l; \$i++) {
\$x = base_convert(substr(\$in, \$i, 1), \$from, 10);
}

return preg_replace('/^0+/', '', \$out);
}
``````

However, I get `3izs0ze1rq66tifrpc` for the number you've provided - maybe your conversion was wrong there?

Source (Stackoverflow)