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中不含有“+/”,经过测试,会有出现一个数字不能正常解码,如下:
「真诚赞赏,手留余香」

- 本站文章除注明转载外,均为本站原创
- 欢迎任何形式的转载,但请务必注明出处,尊重他人劳动
- 转载请注明:文章转载自:Marser [https://www.marser.cn]
- 本文标题:base62编码
- 本文固定链接: https://www.marser.cnarticle/68.html