1 <?php 2 /** 3 * @desc base62编码解码实现 4 * @param String $data 5 * @author Space 6 * @date 2014/8/6 7 **/ 8 9 function base62_encode($data){10 $base62str = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';11 $data = strval($data);12 $base62 = str_split($base62str);13 $len = strlen($data);14 $i = 0;15 $tmpArr = array();16 while($i<$len){17 $val = $data[$i];18 $tmp = str_pad(decbin(ord($data[$i])),8,'0',STR_PAD_LEFT );19 $temp = str_split($tmp,4);20 $tmpArr = array_merge($tmpArr,$temp);21 ++$i;22 }23 $result = '';24 $i = 0;25 foreach($tmpArr as $arr){26 $temp = bindec($arr)*4+$i%2;27 $result .= $base62[$temp];28 ++$i;29 }30 return $result;31 }32 33 function base62_decode($data){34 $base62str = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';35 $data = strval($data);36 $base62 = str_split($base62str);37 $base62Arr = array_flip($base62);38 if(!preg_match('/[a-zA-Z0-9]+/',$data)){39 return false;40 }41 $len = strlen($data);42 $i = 0;43 $tempArr = array();44 while($i<$len){45 $temp = decbin(($base62Arr[$data[$i]]-$i%2)/4);46 $tempArr[] = str_pad($temp,4,'0',STR_PAD_LEFT);47 ++$i;48 }49 $result = '';50 $tempArr = array_chunk($tempArr,2);51 foreach($tempArr as $arr){52 $result .= chr(bindec(join('',$arr)));53 }54 return $result;55 }
必要に応じて $base62str 変数内の文字をランダムに並べ替えることもできます。これは単純な暗号化と同等ですが、あまり意味はありません。