min_digits = 5;
// Set the charset to use in your base
//$basex->charset = range("a","z");
$rand = rand(0,pow(sizeof($basex->charset),$basex->min_digits));
$enc = $basex->encode($rand);
$dec = $basex->decode($enc);
print "Using base: " . sizeof($basex->charset) . "
\n";
print "Charset: " . join("",$basex->charset) . "
\n";
print "Raw: $rand
\n";
print "Encoded: $enc
\n";
print "Decoded: $dec
\n";
///////////////////////////////////////////////////////////////////////////
class basex {
public $charset = array();
public $min_digits = 5;
public $base = 0;
public function __construct() {
// Default charset is A-Z
if (empty($this->charset)) {
$this->charset = range("A","Z");
}
}
public function encode($number) {
$base = sizeof($this->charset);
$min_digits = $this->min_digits;
$charset = $this->charset;
if (!$number) { sprintf("%0{$min_digits}s",0); }
while ($number) {
$digit = $number % $base;
$ret = $charset[$digit] . $ret;
$number = ($number - $digit) / $base;
if ($debug) { print "$digit - "; }
$count++;
if ($count > 10) { exit; }
}
if ($debug) { print "
"; }
$ret = sprintf("%0{$min_digits}s",$ret);
return $ret;
}
public function decode($string) {
$base = sizeof($this->charset);
$min_digits = $this->min_digits;
$charset = $this->charset;
// Do this so it's easier to do a reverse lookup
foreach ($charset as $item) {
$info[$item] = intval($count);
$count++;
}
for($i=0;$i $val ($val * ($digit_pos^$base) = $digit_val)
"; }
}
return $ret;
}
}