首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >base62编码

base62编码

作者头像
Marser
发布2018-06-25 16:49:15
4.9K0
发布2018-06-25 16:49:15
举报
文章被收录于专栏:智能合约智能合约

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中不含有“+/”,经过测试,会有出现一个数字不能正常解码,如下:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:201501-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 特别注意:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档