php – converting a number base 10 to base 62 (a-zA-Z0-9) – Stack Overflow

找了好几个都用不了,就这个结果正向反向相等。

function base_convert_alt($val,$from_base,$to_base){

static $gmp;

static $bc;

static $gmp62;

if ($from_base<37) $val=strtoupper($val);

if ($gmp===null) $gmp=function_exists(‘gmp_init’);

if ($gmp62===null) $gmp62=version_compare(PHP_VERSION,‘5.3.2’)>=0;

if ($gmp && ($gmp62 or ($from_base<37 && $to_base<37)))

return gmp_strval(gmp_init($val,$from_base),$to_base);

if ($bc===null) $bc=function_exists(‘bcscale’);

$range=‘0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz’;

if ($from_base==10)

$base_10=$val;

else

{

$n=strlen(($val=“$val”))-++$ratio;

if ($bc) for($i=$n;$i>-1;($ratio=bcmul($ratio,$from_base)) && $i–)

$base_10=bcadd($base_10,bcmul(strpos($range,$val[$i]),$ratio));

else for($i=$n;$i>-1;($ratio*=$from_base) && $i–)

$base_10+=strpos($range,$val[$i])*$ratio;

}

if ($bc)

do $result.=$range[bcmod($base_10,$to_base)];

while(($base_10=bcdiv($base_10,$to_base))>=1);

else

do $result.=$range[$base_10%$to_base];

while(($base_10/=$to_base)>=1);

return strrev($to_base<37?strtolower($result):$result);

}

echo base_convert_alt(‘2661500360’,7,51);

来源URL:https://stackoverflow.com/questions/4964197/converting-a-number-base-10-to-base-62-a-za-z0-9