Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm Q码算法?这里使用什么算法?_Algorithm_Encoding_Decoding - Fatal编程技术网

Algorithm Q码算法?这里使用什么算法?

Algorithm Q码算法?这里使用什么算法?,algorithm,encoding,decoding,Algorithm,Encoding,Decoding,有人知道用什么样的算法生成Q码吗 200000 : Q1O 200001 : Q1P 200002 : Q1Q 200003 : Q1R 200004 : Q1S 200005 : Q1T 200006 : Q1U 200007 : Q1V 200008 : Q1W 200009 : Q1X 200010 : Q1Y 200011 : Q1Z 200012 : Q20 200013 : Q21 200014 : Q22 200015 : Q23 这是基础转换吗? 例如,我添加了一些额外的行 1

有人知道用什么样的算法生成Q码吗

200000 : Q1O
200001 : Q1P
200002 : Q1Q
200003 : Q1R
200004 : Q1S
200005 : Q1T
200006 : Q1U
200007 : Q1V
200008 : Q1W
200009 : Q1X
200010 : Q1Y
200011 : Q1Z
200012 : Q20
200013 : Q21
200014 : Q22
200015 : Q23
这是基础转换吗? 例如,我添加了一些额外的行

1127745 : 4Jnr
1277450 : 5mk2
1277451 : 5mk3
1277452 : 5mk4
1277453 : 5mk5
1277454 : 5mk6
1277455 : 5mk7
1277456 : 5mk8
1277457 : 5mk9

解决方案是base62编码

 <?php

class Base62 {
    static $base = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    static $base_size = 62;
    static $base_flip = array();

    static function get_base_flip() {
        if(self::$base_flip == array())
            self::$base_flip = array_flip(str_split(Base62::$base));
        return self::$base_flip;
    }

    static function encode($val) {
        $str = '';
        while($val>0) {
            $mod = $val % self::$base_size;
            $str = self::$base[$mod].$str;  
            $val = ($val-$mod)/self::$base_size;
        }
        return $str;
    }

    static function decode($str) {
        $val = 0;
        $base_arr = self::get_base_flip();
        $str_arr = array_reverse(str_split($str)); 
        foreach($str_arr as $key=>$value){ 
            $val += $base_arr[$value]*(pow(self::$base_size,$key));
        }   
        return $val;
    }

}

看起来它只是一个。计数似乎不是从零开始的,但据我所知,没有什么模糊的事情发生。谢谢你的快速回复和回答。我如何实现与你的例子相反的效果?数字到Q代码?
strtoupper(base\u convert($decimal\u number-166244,10,36))
因为有小写和大写字母,所以可能使用base 62(26+26+10)@squemishossifrage我更新了我的问题。您的解决方案适用于第一部分,但当我想要转换例如1277450时,我将得到NTF3作为结果。