为了生成随机字符串,我编写了这样的代码但是如果用负值,零或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;
}
答案 0 :(得分:1)
要停止作为参数传递的负数或零作为问题,您可以使用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)));
}
答案 1 :(得分:0)
如果您唯一关心的是设置长度限制,那么您可以设置自己的长度,如果您的最小值是5,并且$ length是&lt; 5你只需将它设置为5,如果你的最大值是30你可以将它设置为30如果它是&gt; 30 ...看?
这是为了什么?生成一个总长度为32个字符的随机数字串的更好方法是从当前时间戳中获取md5。当然,如果两个用户同时调用代码,但是如果没有关于你正在做什么的额外信息,我不会保证这是独一无二的。我会考虑这种方法。
答案 2 :(得分:0)
您可以检查长度的正确值。如果指定的长度不是实际值,则应重置它。
function generateRandomString($length)
{
if($length < 1 || $length > 50)
{
$length = 25;
}
// do the rest here...
}
答案 3 :(得分:0)
/*
* 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;
}