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