php 64进制生成和转换类,也可以任意进制
2017-02-21 14:24
399 查看
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>";
}
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>";
}
相关文章推荐
- php实现将任意进制数转换成10进制的方法
- 任何进制的任何数(没有大小限制)向任何进制的数的转换方法(进制原则可以任意,但是大于十表示不方便)
- php任意进制转换base_convert()
- 关于进制转换的一些函数(可以任意进制转换为任意进制)
- PHP进制转换[实现2、8、16、36、64进制至10进制相互转换]
- 用"指定字符组成的任意进制"转换生成不带4的卡号
- PHP常用函数:62进制转换及任意进制之间转换函数
- PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)
- 任意进制间的转换
- 让自定义的类型可以和任意的类型之间转换
- 让自定义的类型可以和任意的类型之间转换
- 将任意二进制转换成十进制
- 进制数转换器的VB算法实现(2/8/10/16进制数可以相互转换)
- 转帖:c#任意进制转换(2-36进制之间的转换)
- 已知一个iis漏洞可以让php解释任意的给定文件
- PHP 生成任意长度的随机字符串
- 精灵哈希算法 (Elf Hash) 可以把任意长度的数据转换成int数字
- 用PHP生成验证码可以进行点击刷新
- 同余幂的原理和C++实现,附赠一个10进制数转换为任意进制的数组的算法。
- 让自定义的类型可以和任意的类型之间转换