将字母数字(Base36)转换为int(Base10)和Viceversa



我有这个字符串"AUB9789LJLKA89";。我需要将其转换为int,稍后我需要能够将其转换回字符串。

为了做到这一点,我在PHP中发现了";base_convert";,但是当我转换";AUB9789LJLKA89";到Base10,我得到数字:1849450200354407248260,如果我将该数字转换回Base36,我得到"0";AUB9789LJLKWCC";。与";AUB9789LJLKA89";。

base_convert("AUB9789LJLKA89", 36, 10); //I get 1849450200354407248260
base_convert(1849450200354407248260, 10, 36); //I get AUB9789LJLKWCC

我该怎么解决这个问题?或者我可以使用哪种其他方式将字母数字转换为int。

我在php文档页面上找到了这个用于转换贡献者编写的库的函数,请尝试它,看看它是否能给你想要的结果。

function convBase($numberInput, $fromBaseInput, $toBaseInput)
{
if ($fromBaseInput == $toBaseInput) {
return $numberInput;
}
$fromBase = str_split($fromBaseInput, 1);
$toBase = str_split($toBaseInput, 1);
$number = str_split($numberInput, 1);
$fromLen = strlen($fromBaseInput);
$toLen = strlen($toBaseInput);
$numberLen = strlen($numberInput);
$retval = '';
if ($toBaseInput == '0123456789') {
$retval = 0;
for ($i = 1; $i <= $numberLen; $i++) {
$retval = bcadd($retval, bcmul(array_search($number[$i - 1], $fromBase), bcpow($fromLen, $numberLen - $i)));
}
return $retval;
}
if ($fromBaseInput != '0123456789') {
$base10 = convBase($numberInput, $fromBaseInput, '0123456789');
} else {
$base10 = $numberInput;
}
if ($base10 < strlen($toBaseInput)) {
return $toBase[$base10];
}
while ($base10 != '0') {
$retval = $toBase[bcmod($base10, $toLen)] . $retval;
$base10 = bcdiv($base10, $toLen, 0);
}
return $retval;
}
$b36 = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$b10 = '0123456789';
$b5 = '01234';
$b2 = '01';
$con = convBase('AUB9789LJLKA89', $b36, $b10); // 1849450200354407014857
$con = convBase('1849450200354407014857', $b10, $b36); // AUB9789LJLKA89

相关内容

  • 没有找到相关文章

最新更新