<?php
function gdr_encode($val) {
$bin = '';
while ($val > 0) {
$bin .= chr($val & 0xFF);
$val >>= 8;
}
return str_replace(array('/', '='), array('_', ''), base64_encode($bin));
}
function gdr_decode($str) {
$bin = base64_decode(str_replace('_', '/', $str));
$val = 0;
for ($i=strlen($bin)-1; $i>=0; $i--) {
$val |= ord($bin[$i]) << $i*8;
}
return $val;
}
function test_enc($val) {
$enc = gdr_encode($val);
$dec = gdr_decode($enc);
if ($val === $dec) {
echo "$enc $val\n";
} else {
echo "$enc $valĀ ERROR: gdr_decode($enc) == $dec\n";
}
}
foreach (array(0, 1, 99, 100, 255, 256, 999, 1000, 9999, 10000) as $val) {
test_enc($val);
}
echo "\n";
// seed rng for consistent values
if (phpversion() < '5.2.1') { die('old rng'); }
mt_srand(42);
for ($i=0; $i<63; $i++) {
$val = 1<<$i;
$val += mt_rand(0, $val/2);
test_enc($val);
}
preferences:
32.78 ms | 402 KiB | 5 Q