48 lines
928 B
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;
|
|
}
|
|
|
|
}
|