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

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

PHP中文网
PHP中文网원래의
2016-05-25 17:02:321418검색

$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으로 문의하세요.