天天看點

base62編碼

Base62編碼是由10個數字、26個大寫英文字母和26個小寫英文字母組成,多用于安全領域。本文将介紹對數字進行Base62編碼與解碼的方法。

直接上代碼,如下:

/**
         * base62編碼與解碼key,由10個數字、26個大寫英文字母和26個小寫英文字母組成
         * @var string
         */
        private $key = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/';

        /**
         * base62編碼
         * @param string $str
         * @return string
         */
        public function base62_encode($str) {
            $out = '';
            for($t=floor(log10($str)/log10(62)); $t>=0; $t--) {
                $a = floor($str / pow(62, $t));
                $out = $out.substr($this->key, $a, 1);
                $str = $str - ($a * pow(62, $t));
            }
            return $out;
        }

        /**
         * base62解碼
         * @param string $str
         * @return string
         */
        public function base62_decode($str) {
            $out = 0;
            $len = strlen($str) - 1;
            for($t=0; $t<=$len; $t++) {
                $out = $out + strpos($this->key, substr($str, $t, 1)) * pow(62, $len - $t);
            }
            return substr(sprintf("%f", $out), 0, -7);
        }

        /**
         * 測試程式
         */
        public function indexAction(){
            header('content-Type:text/html;charset=utf-8');
            $equal = $notequal = 0;
            for($i=0; $i<10000000; $i++){
                $encode = $this -> base62_encode($i);
                $decode = $this -> base62_decode($encode);
                if($decode == $i){
                    $equal++;
                }else{
                    $notequal++;
                    echo "{$i}---{$encode}---{$decode}<br />";
                }
            }
            echo "相等{$equal},不相等{$notequal}<br />";

        }           

複制

經過對1千萬個數字進行檢驗測試,頁面輸出如下:

相等10000000,不相等0           

複制

準确率達到100%。

特别注意:

Base62編碼與解碼的key中,必須包含有“+/”這兩個字元,如下代碼所示:

private $key = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/';           

複制

若key中不含有“+/”,經過測試,會有出現一個數字不能正常解碼,如下:

base62編碼
  • 本站文章除注明轉載外,均為本站原創
  • 歡迎任何形式的轉載,但請務必注明出處,尊重他人勞動
  • 轉載請注明:文章轉載自:Marser [https://www.marser.cn]
  • 本文标題:base62編碼
  • 本文固定連結: https://www.marser.cnarticle/68.html