1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- <?php
- namespace App\Services;
- use Cache;
- class HashidService {
- public const MIN_LIMIT = 15;
- public const CMAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';
- public static function encode($id)
- {
- if(!is_numeric($id) || $id > PHP_INT_MAX || strlen($id) < self::MIN_LIMIT) {
- return null;
- }
- $key = "hashids:{$id}";
- return Cache::remember($key, now()->hours(48), function() use($id) {
- $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)
- {
- $len = strlen($short);
- if($len < 3 || $len > 11) {
- return null;
- }
- $id = 0;
- foreach(str_split($short) as $needle) {
- $pos = strpos(self::CMAP, $needle);
- // if(!$pos) {
- // return null;
- // }
- $id = ($id*64) + $pos;
- }
- if(strlen($id) < self::MIN_LIMIT) {
- return null;
- }
- return $id;
- }
- }
|