PHP:10進数を64進数にエンコード・デコードする。

  • 投稿
  • 編集

サンプル見つけたのメモ。

 

 

すばらしい(涙)

<?php
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 "<div class=\"block_1\">" ;
echo "<p>10進数:".$dec."\n</p>" ;
echo "<p>10進数を64進数に変換:".$b64."\n</p>" ;
echo "<p>64進数を10進数にデコード:".b64_to_dec($b64)."\n</p>" ;
echo "<p>64進数\"Hoshiya\"を10進数にデコード:".b64_to_dec('Hoshiya')."</p>" ;
echo "</div>" ;
?>

ちょっといじくったけど、以下がその結果。

10進数:1234567890

10進数を64進数に変換:19bWBI

64進数を10進数にデコード:1234567890

64進数"Hoshiya"を10進数にデコード:1222835621668

 

 

その他参考