首页 >php教程 >PHP源码 >php生成短网址|bcmath|base62.class.php

php生成短网址|bcmath|base62.class.php

PHP中文网
PHP中文网原创
2016-05-25 17:02:321416浏览

$base62 = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
将一个合理的数值大小通过一个与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;     
    }
     
}
声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn