之前寫過一個版本的PHP rand取得變數的方法,不過後來實務上發現缺點。因為PHP 內建rand的產生發方式,主要是依據時間,所以兩個人同時取得,或著時間接近取得的亂數會是一樣的,所以在這個版本修正這個問題。

shuffle($RandomStr);

主要在上述的行動手腳,shuffle 是用來將陣列的順序弄混。

所以他的運作概念是,每次要取號,就把基底弄亂一變,在取得。

目前這個版本有用暴力測試過,可以確定取得不容易重覆。

    /**
     * 取得隨機亂數
     *
     * @access public
     * @param returnSize 要隨機的字串長度
     * @param appendStr 附加字串
     * @param Type 位置 1=附加字串在前  2=附加字串在後
     * @param RandomStr 隨機字串內容
     * @return   回傳產生的值
     */
    function get_random_str($returnSize = "8", $appendStr = "", $Type = "1", $RandomStr = "") {
        $returnStr = "";
        if (strlen($RandomStr) == 0) {
            $RandomStr = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        }
        $RandomStrSize = strlen($RandomStr);
        for ($i = 1; $i <= $returnSize; $i++) {
            //$rg=rand(0,100)%strlen($RandomStr);
            shuffle($RandomStr);
            $returnStr.=$RandomStr[rand(0, $RandomStrSize - 1)];
        }
        if ($Type == "1") {
            $returnStr = $appendStr . $returnStr;
        } else if ($Type == "2") {
            $returnStr = $returnStr . $appendStr;
        }
        return $returnStr;
    }

arrow
arrow
    文章標籤
    PHP Random rand 亂數
    全站熱搜

    阿基 發表在 痞客邦 留言(0) 人氣()