簡體   English   中英

生成一個隨機字符串PHP

[英]Generate a random string PHP

為了生成隨機字符串,我編寫了這樣的代碼,但是,如果使用負值(或零或100萬)調用函數,則會產生很多問題。 所以請給我建議更好的代碼。

/*
* The following function is for generating a random string value.
* @param unknown_type $length
* @return string $randString
*/
function generateRandomString( $length ) {
    $randString = "";
    srand();
    $characters = "abcdefghijklmnopqrstuvwxyz1234567890";
    /*
    *   build string of random characters
    */ 
    while( strlen( $randString ) < $length ) {
        $randString .= substr( $characters, rand() % (strlen( $characters )),1 );
    }
return $randString;
}

要阻止作為參數傳遞的負數或零成為問題,可以使用max(1, $length) 或者,檢查< 1並引發異常或返回FALSE

所以請給我建議更好的代碼。

這是您的代碼的一些建議...

function generateRandomString( $length ) {
    $chars = array_merge(range('a', 'z'), range(0, 9));
    shuffle($chars);
    return implode(array_slice($chars, 0, $length));
}

鍵盤

請注意,在結果字符串中,此字符永遠不會兩次出現。

如果您確實希望這樣做,可以使用...

function generateRandomString( $length ) {
    $chars = array_merge(range('a', 'z'), range(0, 9));

    return array_reduce(array_rand($chars, $length), function($str, $key) use ($chars) { 
        return $str.= $chars[$key];
    }, ''); 

}

鍵盤

或略有不同

function generateRandomString( $length ) {
    $chars = array_merge(range('a', 'z'), range(0, 9));

    return implode(array_map(function($key) use ($chars) { 
        return $chars[$key];
    }, array_rand($chars, $length)));   

}

鍵盤

如果您唯一關心的是設置長度限制,則可以設置自己的長度,如果最小為5,而$ length <5,則將其設置為5,如果最大為30,則可以將其設置為30, > 30 ...看到了嗎?

這個是來做什么的? 生成始終為32個字符的數字隨機字符串的一種更好的方法是從當前時間戳中獲取md5。 當然,這不能保證是唯一的,如果兩個用戶同時調用代碼,但是在沒有其他信息的情況下,我會考慮采用這種方法。

您可以檢查長度的正確值。 如果指定的長度不是練習長度,則應將其重置。

function generateRandomString($length) 
{
    if($length < 1 || $length > 50)
    {
        $length = 25;    
    }

    // do the rest here...
}
    /*
    * The following function is for generating a random string value.
    * @param unknown_type $length
    * @return string $randString
    */
    function generateRandomString( $length ) {
        $valueCheck = 99999999;            
        $length = ($length<0)?-$length:$length;
        $length = ($length==0)?rand(0,$valueCheck):$length;
        $length = ($length>$valueCheck)?rand(0,$valueCheck):$length;
        $randString = "";
        srand();
        $characters = "abcdefghijklmnopqrstuvwxyz1234567890";
        /*
        *   build string of random characters
        */ 
        while( strlen( $randString ) < $length ) {
            $randString .= substr( $characters, rand() % (strlen( $characters )),1 );
        }
    return $randString;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM