php base62,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}
";

}

}

echo "相等{$equal},不相等{$notequal}
";

}

经过对1千万个数字进行检验测试,页面输出如下:

相等10000000,不相等0

准确率达到100%。

特别注意:

Base62编码与解码的key中,必须包含有“+/”这两个字符,如下代码所示:

private $key = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/';

若key中不含有“+/”,经过测试,会有出现一个数字不能正常解码,如下:

1435dcee6855d91f5ae193a14e0077e0.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值