<?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, 65535, 65536, 99999, 100000, 999999, 1000000, 4294967295, 4294967296) 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:
44.41 ms | 402 KiB | 5 Q