天天看點

談談 62進制 解決 數字加密 的方法

             若想對純數字進行加密,即想讓别人無法猜到你的數,又想縮小長度,還要保證不出現特殊字元,  那麼你可以将十進制數轉化成 自定義的 62進制。 

         0-9,a-z,A-Z合起來正好為62個字元, 并且你可以将這些字元随機拼裝,形成一個映射表: 

         比如    61 我們用0來表示, 60用A來表示,0用n來表示。 隻要不知道你的映射表, 其他人不可能一眼就猜出你的真實資料。

/**
     * 将十進制轉成62進制
     * @param $n
     */
    public static  function _10to62($n){
        $table ="6Qw7fWXgTjkcordIKLvBstRSD3n904U5e8ZMOPluhJmiNxVyzY12AFGHabpCEq";  //映射表
        //   $table ="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        $res = "";
        while(($a=floor($n/62)) > 0)
        {
            $res = $table[$n%62].$res;
            $n = $a;
        }
        $res = $table[$n%62].$res;
        return $res;
    }

    /**
     * 将 62進制轉成10進制
     */
    public static  function _62to10($m){
        $table ="6Qw7fWXgTjkcordIKLvBstRSD3n904U5e8ZMOPluhJmiNxVyzY12AFGHabpCEq";  //映射表
        // $table ="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        $res = 0;
        for($n=strlen($m),$i=$n-1;$i>=0;$i--){
            $res += strpos($table,$m[$n-$i-1])*pow(62,$i);
        }
        return $res;
    }