123456789101112131415161718192021222324252627282930313233343536373839 |
- <?php
- namespace App\Services;
- 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;
- }
- }
|