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

时间:2018-05-21 19:13:46

标签: 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

这个基地转换了吗? 我添加了一些额外的行,例如

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

1 个答案:

答案 0 :(得分:1)

解决方案是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;
    }

}