php生成短网址|bcmath|base62.class.php
程序员文章站
2022-05-24 21:39:34
...
$base62 = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
将一个合理的数值大小通过一个与base62这样的字串的“映射”做成的hash散列字串
用到了扩展函数bcmath,目的在于可以支持较为更大的数值大小,最大在:99999999999999
Base62::encode(99999999999999);
Base62::decode();
将一个合理的数值大小通过一个与base62这样的字串的“映射”做成的hash散列字串
用到了扩展函数bcmath,目的在于可以支持较为更大的数值大小,最大在:99999999999999
Base62::encode(99999999999999);
Base62::decode();
php代码
class Base62{ private static $base62 = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; public static function encode($number, $encode = ''){ while($number > 0){ $mod = bcmod($number, 62); $encode .= self::$base62[$mod]; $number = bcdiv(bcsub($number, $mod), 62); } return strrev($encode); } public static function decode($encode, $number = 0){ $length = strlen($encode); $baselist = array_flip(str_split(self::$base62)); for($i = 0; $i < $length; $i++){ $number = bcadd($number, bcmul($baselist[$encode[$i]], bcpow(62, $length - $i - 1))); } return $number; } }