将以10为底的数字转换为以62为底的数字(a-zA-Z0-9)

我有一个以10为底的数字。是否有将其转换为以62为底的数字?

例:

echo convert(12324324);

// returns Yg3 (fantasy example here)

PHP base_convert()可以转换为基数36。

回答:

:一个快速而肮脏的解决方案可以是使用如下函数:

function toChars($number) {

$res = base_convert($number, 10,26);

$res = strtr($res,'0123456789','qrstuvxwyz');

return $res;

}

基数转换将您的数字转换为数字为0-9a-p的基数,然后使用快速的char替换摆脱其余的数字。

如您所见,该功能易于逆转。

function toNum($number) {

$res = strtr($number,'qrstuvxwyz','0123456789');

$res = base_convert($number, 26,10);

return $res;

}

顺便说一句,您将使用此功能做什么?


根据问题的更改和@jnpcl的答案,这是一组函数,它们执行基本转换而无需使用pow和log(它们花费一半的时间来完成测试)。

该函数仅适用于整数值。

function toBase($num, $b=62) {

$base='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

$r = $num % $b ;

$res = $base[$r];

$q = floor($num/$b);

while ($q) {

$r = $q % $b;

$q =floor($q/$b);

$res = $base[$r].$res;

}

return $res;

}

function to10( $num, $b=62) {

$base='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

$limit = strlen($num);

$res=strpos($base,$num[0]);

for($i=1;$i<$limit;$i++) {

$res = $b * $res + strpos($base,$num[$i]);

}

return $res;

}

考试:

for ($i = 0; $i<1000000; $i++) {

$x = toBase($i);

$y = to10($x);

if ($i-$y)

echo "\n$i -> $x -> $y";

}

以上是 将以10为底的数字转换为以62为底的数字(a-zA-Z0-9) 的全部内容, 来源链接: utcz.com/qa/400406.html

回到顶部