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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏深度学习之tensorflow实战篇

网页爬虫-R语言实现基本函数

#*************网页爬虫-R语言实现,函数库文件*******# #****作者:H********************************...

3137
来自专栏xingoo, 一个梦想做发明家的程序员

Lucene查询语法详解

Lucene查询 Lucene查询语法以可读的方式书写,然后使用JavaCC进行词法转换,转换成机器可识别的查询。 下面着重介绍下Lucene支持的查询: Te...

2819
来自专栏Python小屋

使用Python模拟伪随机数生成原理

伪随机数生成有很多种方法,其中一个是这样的:rNew = (a*rOld + b) % (end-start),然后设置rOld = rNew,一般要求用户指定...

2415
来自专栏刺客博客

使用sed命令在两行匹配之间插入一行新内容

在这两个之间插入一行liming。 解决办法: 查了一下sed的用法貌似可以试一下,看到命令n可以读入下一行到pattern space,就可一匹配完前一行...

762
来自专栏CSDN技术头条

使用Go语言来理解Tensorflow

【译者注】本文通过一个简单的Go绑定实例,让读者一步一步地学习到Tensorflow有关ID、作用域、类型等方面的知识。以下是译文。 Tensorflow并不是...

23510
来自专栏程序员互动联盟

【问题追踪】scanf引发的“血案”

最近我遇到C语言学习中一个比较容易让我们这种新手犯错或者忽略的地方。那就是关于scanf函数在读取字符时的问题,以及getchar()与回车的一点恩恩怨怨,换句...

2726
来自专栏有趣的Python和你

GIF图倒序播放代码原图倒序图

今天在爬虫群,看到一个有趣的Python代码,可以把GIF图倒序播放,代码很简单,首先要安装pillow库。

601
来自专栏IT开发技术与工作效率

Excel函数学习重点指南(官网)

853
来自专栏python爬虫日记

cxfreeze打包python程序的方法说明(生成安装包,实现桌面快捷方式、删除快捷方式)

python代码文件转exe方法有三种,分别是cx_freeze,py2exe,PyInstaller,这三种方式各有千秋,本人只用过py2exe和cxfree...

994
来自专栏专注 Java 基础分享

初识Hibernate之关联映射(一)

     上篇文章我们对持久化对象进行的学习,了解了它的三种不同的状态并通过它完成对数据库的映射操作。但这都是基于单张表的操作,如果两张或者两张以上的表之间存在...

1778

扫码关注云+社区