wikipoints/classes/x62.php

48 lines
928 B
PHP

<?php
/**
* Класс для сокращения ссылок - переводит INT идентификатор в 62-ричную систему исчисления.
*/
class x62
{
private static $ABC = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
public static function encode($in)
{
$len = strlen(self::$ABC);
$in = intval($in);
$out = '';
while ($in >= 0) {
if ($in >= $len) {
$tmp = floor($in / $len);
$out .= self::$ABC[(int) ($in - $tmp * $len)];
$in = $tmp;
} else {
$out .= self::$ABC[(int) $in];
$in = -1;
}
}
return strrev($out);
}
public static function decode($in)
{
$out = 0;
$exp = 0;
for ($i = strlen($in) - 1; $i >= 0; $i--) {
$n = strpos(self::$ABC, $in[$i]);
if ($n === false) {
return false; //Хрень какую-то прислали
}
$out += $n * pow(62, $exp);
$exp++;
}
return $out;
}
}