我试图创建一个生成随机字符串的函数,但字符串有时是错误的长度。
function getRandomName($maxChars)
{
$nameChars = str_split("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890");
$numOfChars = count($nameChars); // amount of characters in $nameChars
$randomString = "";
for($count=0;$count<$maxChars;$count++)
{
$randomInt = round(rand(0,$numOfChars));
$selectedChar = $nameChars[$randomInt]; // random character in $nameChars
$randomString .= $selectedChar; // adds to string
}
echo " ".strlen($randomString).", "; // length, string is echoed later
return $randomString;
}
exit(getRandomName(6)); // 6 characters long
?>
大多数情况下,结果将类似于6, s2jd8q
。但有时,结果类似于5, d82kw
。我只想要6个字符长的字符串,而不是5个字符串。
任何人都知道如何解决这个问题?
答案 0 :(得分:0)
将$randomInt = round(rand(0,$numOfChars));
修改为$randomInt = round(rand(0,$numOfChars-1));
如果你运行
$nameChars = str_split("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890");
$numOfChars = count($nameChars); // amount of characters in $nameChars
//$numOfChars = 62
echo($nameChars[61]); //Output: 0 (Last character)
答案 1 :(得分:0)
我有同样的问题!不知怎的,我设法解决了这个问题!这是我生成随机字符串的ErrorLess函数。
public static function generateKey($length)
{
$str = "";
$chars = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ^*(_=?+|%-";
$charlen = strlen($chars);
for($i=0;$i<$length;$i++)
{
$str .= $chars[rand(0,$charlen-1)];
}
return $str;
}
此功能易于理解和工作,没有任何长度错误!让我知道它是否有帮助!
您可以根据需要更换角色!
答案 2 :(得分:0)
我之前做过这个,它与其他类似,但使用substr()函数。这是:
function randomKey($length = 32) {
$key = '';
$characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
for ($i = 0; $i < $length; $i++) {
// Get 1 random char from 0 to characters length
$key .= substr($characters, rand(0, strlen($characters) - 1), 1);
}
return $key;
}
echo randomKey();
希望你也觉得这很有用。问候。
答案 3 :(得分:0)
我总是使用此函数生成自定义随机字符串...
<?php
function random_alphanumeric($length) {
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ12345689';
$my_string = '';
for ($i = 0; $i < $length; $i++) {
$pos = mt_rand(0, strlen($chars) -1);
$my_string .= substr($chars, $pos, 1);
}
return $my_string;
}
$test = random_alphanumeric(50); // 50 characters
echo $test;
?>
打印输出:rqY4ePLhQYvu5d5m8Mfvcj8ZiYQbPu5tOzuIcMeWR5thmrlYpt
如果您需要两个唯一的字符串,我建议您使用这种方法...
$string_1 = random_alphanumeric(50);
$string_2 = random_alphanumeric(50);
while ($string_1 == $string_2) {
$string_1 = random_alphanumeric(50);
$string_2 = random_alphanumeric(50);
if ($string_1 != $string_2) {
break;
}
}
echo $string_1;
echo "<br>\n";
echo $string_2;
$ string_1:fX9KdYyFeF5JA5ceJpHTKy2uXaijwVvKsJlt288Xxg2q89BrNf
$ string_2:g9RG4kdLgxxhu8QzmkWHH4eyH1WCaUjYaALejR26Nnzjvqmjw1
如果您发现我的答案有用,请给我投票:)
答案 4 :(得分:0)
这里是一个解决方案,它使用字符数组处理,避免使用substr
并转换为数组。它比此处发布的所有其他解决方案要快得多。
function randomString($length)
{
$out = '';
for($i = 0; $i < $length; ++$i)
switch(mt_rand(0, 2))
{
case 0: $out .= char(mt_rand(48, 57)); break;
case 1: $out .= char(mt_rand(65, 90)); break;
case 2: $out .= char(mt_rand(97, 122)); break;
}
return $out;
}