2015
01-21
01-21
base62编码 HOT
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 />";
}