class baseTransform{
private $alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';
private $base = 0;
public function __construct(){
$this -> base = strlen($this -> alphabet);//计算进制数
}
//生成方法
public function transformBase($id)
{
$shortenedId = '';
if($id == 0){
$shortenedId = $this -> alphabet{0};
}
while($id > 0){
$remainder = $id % $this -> base;
$id = ($id-$remainder) / $this -> base;
if($remainder == 0){
$shortenedId = $this -> alphabet{0} . $shortenedId;
}else{
$shortenedId = $this -> alphabet{$remainder} . $shortenedId;
}
}
return $shortenedId;
}
//转换方法
public function transformDec($base_num){
$raw_base = $base_num;
$data_length = strlen($raw_base);
$dec_data = 0;
for($i = 0; $i < $data_length; $i++){//每一位分别读取
$mult = 1;
for($j = $data_length - 1; $j > $i; $j--){//构造当前位需要乘的数
if($i == ($data_length - 1)){
$mult = 1;
}else{
$mult = $mult * $this -> base;
}
}
$dec_data += strpos($this -> alphabet, $raw_base{$i}) * $mult; //计算当前位数代表的十进制数,然后累加
}
return $dec_data;
}
}
//测试10000个数
$transform = new baseTransform();
for($i = 0; $i < 10000; $i ++){
//$base64 = sprintf('%05d', $i);
$sring0 = $transform -> transformBase($i);
echo $sring0." ";
echo preg_replace('/^0+/','',$sring0)." ";
echo $dec_num = $transform -> transformDec($sring0);
//var_dump($dec_num);
echo "</br>";
}