pixelfed/app/Services/HashidService.php

40 lines
852 B
PHP
Raw Permalink Normal View History

2020-07-18 23:53:40 +00:00
<?php
namespace App\Services;
2024-03-10 11:42:25 +00:00
class HashidService
{
public const CMAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';
public static function encode($id, $minLimit = true)
{
if (! is_numeric($id) || $id > PHP_INT_MAX) {
return null;
}
$cmap = self::CMAP;
$base = strlen($cmap);
$shortcode = '';
while ($id) {
$id = ($id - ($r = $id % $base)) / $base;
$shortcode = $cmap[$r].$shortcode;
}
return $shortcode;
}
public static function decode($short = false)
{
if (! $short) {
return;
}
$id = 0;
foreach (str_split($short) as $needle) {
$pos = strpos(self::CMAP, $needle);
$id = ($id * 64) + $pos;
}
return $id;
}
}