首页 > 编程 > PHP > 正文

php 64进制生成和转换类,也可以任意进制

2019-11-08 01:16:30
字体:
来源:转载
供稿:网友
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."&nbsp;&nbsp;&nbsp;&nbsp;";        echo preg_replace('/^0+/','',$sring0)."&nbsp;&nbsp;&nbsp;&nbsp;";        echo $dec_num =  $transform -> transformDec($sring0);        //var_dump($dec_num);        echo "</br>";    }
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表