- chr: documentation ( source)
- base64_decode: documentation ( source)
- mt_rand: documentation ( source)
- mt_srand: documentation ( source)
- str_replace: documentation ( source)
- base64_encode: documentation ( source)
- ord: documentation ( source)
<?php
function gdr_encode($val) {
$str = '';
while ($val > 0) {
$str .= chr($val & 0xFF);
$val = $val >> 8;
}
return str_replace(array('/', '='), array('_', ''), base64_encode($str));
}
function gdr_decode($bin) {
$str = base64_decode(str_replace('_', '/', $bin));
$val = 0;
for ($i=0; $i<strlen($str); $i++) {
$val |= ord($str[$i]) << $i*8;
}
return $val;
}
mt_srand(42); // seed rng for semi-consistent values
for ($i=0; $i<32; $i++) {
$val = 1<<$i;
$val += mt_rand(0, $val/2);
$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";
}
}