Base64 にならって 0~9,A~Z,a~z,+,/ を使う。
function dec_to_b64($decnum) {
$chars = array_merge(range(0,9),range('A','Z'),range('a','z'),array('+','/')) ;
$result = '' ;
for (; $decnum > 0; $decnum = floor($decnum/64)) {
$result = $chars[$decnum%64].$result ;
}
return $result == '' ? '0' : $result ;
}
function b64_to_dec($b64num) {
$chars = array_flip(array_merge(range(0,9),range('A','Z'),range('a','z'),array('+','/'))) ;
$digits = array_reverse(preg_split('//',$b64num, -1, PREG_SPLIT_NO_EMPTY)) ;
$result = 0 ;
for($i = 0; $i < count($digits); ++$i) {
if (!$chars[$digits[$i]]) return false ;
$result += pow(64, $i) * $chars[$digits[$i]] ;
}
return $result ;
}
$dec = 1234567890 ;
$b64 = dec_to_b64($dec) ;
echo $b64."\n" ;
echo b64_to_dec($b64)."\n" ;
echo b64_to_dec('Hatena') ;
Base64 にならって 0~9,A~Z,a~z,+,/ を使う。
function dec_to_b64($decnum) {
$chars = array_merge(range(0,9),range('A','Z'),range('a','z'),array('+','/')) ;
$result = '' ;
for (; $decnum > 0; $decnum = floor($decnum/64)) {
$result = $chars[$decnum%64].$result ;
}
return $result == '' ? '0' : $result ;
}
function b64_to_dec($b64num) {
$chars = array_flip(array_merge(range(0,9),range('A','Z'),range('a','z'),array('+','/'))) ;
$digits = array_reverse(preg_split('//',$b64num, -1, PREG_SPLIT_NO_EMPTY)) ;
$result = 0 ;
for($i = 0; $i < count($digits); ++$i) {
if (!$chars[$digits[$i]]) return false ;
$result += pow(64, $i) * $chars[$digits[$i]] ;
}
return $result ;
}
$dec = 1234567890 ;
$b64 = dec_to_b64($dec) ;
echo $b64."\n" ;
echo b64_to_dec($b64)."\n" ;
echo b64_to_dec('Hatena') ;