之前寫過一個版本的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; }
|
留言列表