随机字符串生成器生成长度错误的字符串(PHP)

随机字符串生成器生成长度错误的字符串(PHP),php,Php,我试图创建一个生成随机字符串的函数,但是字符串的长度有时是错误的。 function getRandomName($maxChars) { $nameChars = str_split("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"); $numOfChars = count($nameChars); // amount of characters in $nameChars $random

我试图创建一个生成随机字符串的函数,但是字符串的长度有时是错误的。
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

?>
函数getRandomName($maxChars) { $nameChars=str_split(“abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyz1234567890”); $numochars=count($nameChars);//$nameChars中的字符数 $string=“”; 对于($count=0;$count) 大多数情况下,结果类似于
6,s2jd8q
。但有时,结果类似于
5,d82kw
。我只希望字符串长度为6个字符,而不是5个字符。
有人知道如何解决这个问题吗?

编辑
$randomInt=round(rand(0,$numochars));
$randomInt=round(rand(0,$numochars-1));

如果你运行这个

$nameChars = str_split("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890");
$numOfChars = count($nameChars); // amount of characters in $nameChars
//$numOfChars = 62

echo($nameChars[61]); //Output: 0 (Last character)

编辑
$randomInt=round(rand(0,$numochars));
$randomInt=round(rand(0,$numochars-1));

如果你运行这个

$nameChars = str_split("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890");
$numOfChars = count($nameChars); // amount of characters in $nameChars
//$numOfChars = 62

echo($nameChars[61]); //Output: 0 (Last character)

我也遇到了同样的问题!我设法解决了这个问题!这是我生成随机字符串的无错误函数

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;
}
公共静态函数generateKey($length)
{
$str=”“;
$chars=“1234567890abcdefghijklmnopqrstuvwxyzabefghijklmnopqrstuvwxyz^*(=?+|%-”;
$charlen=strlen($chars);

对于($i=0;$i我也遇到了同样的问题!我设法解决了这个问题!下面是生成随机字符串的无错误函数

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;
}
公共静态函数generateKey($length)
{
$str=”“;
$chars=“1234567890abcdefghijklmnopqrstuvwxyzabefghijklmnopqrstuvwxyz^*(=?+|%-”;
$charlen=strlen($chars);

对于($i=0;$i我刚才做过这个,它与其他类似,只是使用了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();
函数随机键($length=32){
$key='';
$characters='abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyzo123456789';
对于($i=0;$i<$length;$i++){
//从0到个字符长度获取1个随机字符
$key.=substr($characters,rand(0,strlen($characters)-1),1);
}
返回$key;
}
回声随机键();

希望您也能发现此功能很有用。您好。

我不久前做过此功能,它与其他功能类似,但使用了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();
函数随机键($length=32){
$key='';
$characters='abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyzo123456789';
对于($i=0;$i<$length;$i++){
//从0到个字符长度获取1个随机字符
$key.=substr($characters,rand(0,strlen($characters)-1),1);
}
返回$key;
}
回声随机键();

希望您也能发现这一点。祝您好运。

我总是使用此my函数生成自定义随机字符串

<?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\u 1=随机字母数字(50);
$string_2=随机字母数字(50);
而($string_1==$string_2){
$string_1=随机字母数字(50);
$string_2=随机字母数字(50);
如果($string_1!=$string_2){
打破
}
}
echo$string_1;
回声“
\n”; echo$string_2;
$string_1:
fx9kdyyfef5ja5cejphtky2uxaijwvvksjlt28xxg2q89brnf


$string_2:
g9RG4kdLgxxhu8QzmkWHH4eyH1WCaUjYaALejR26Nnzjvqmjw1

我总是使用此my函数生成自定义随机字符串

<?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\u 1=随机字母数字(50);
$string_2=随机字母数字(50);
而($string_1==$string_2){
$string_1=随机字母数字(50);
$string_2=随机字母数字(50);
如果($string_1!=$string_2){
打破
}
}
echo$string_1;
回声“
\n”; echo$string_2;
$string_1:
fx9kdyyfef5ja5cejphtky2uxaijwvvksjlt28xxg2q89brnf


$string_2:
g9RG4kdLgxxhu8QzmkWHH4eyH1WCaUjYaALejR26Nnzjvqmjw1
这是一个解决方案,它处理字符数组,避免
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;
}
函数随机字符串($length)
{
$out='';
对于($i=0;$i<$length;++$i)
开关(mt_rand(0,2))
{
案例0:$out.=char(mt_rand(48,57));break;
案例1:$out.=char(mt_rand(65,90));break;
案例2:$out.=char(mt_rand(97122));break;
}
退回$out;
}

这里有一个解决方案,它处理字符数组,避免
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;
}
函数随机字符串($length)
{
$out='';
对于($i=0;$i<$length;++$i)
开关(mt_rand(0,2))
{
案例0:$out.=char(mt_rand(48,57));break;
案例1:$out.=char(mt_rand(65,90));break;
案例2:$out.=char(mt_rand(97122));break;
}
退回$out;
}

如果要这样做,为什么不直接访问字符索引?
$my_string.=$chars[mt_rand(0,strlen($chars)-1)];
如果要这样做,为什么不直接访问字符索引?
$my_string.=$chars[mt rand(0,strlen($chars)-1)];
为什么使用
substr
,只需访问字符串索引。即:
$key.=$characters[rand(0,strlen($characters)-1)];
为什么使用
substr
,只需访问字符串索引。即:
$key.=$characters[rand(0,strlen($characters)-1)];
与这里的大多数解决方案相比,这种方法非常好,原因有两个。1)它预先计算
$chars
的长度;2)您可以通过它的索引而不是使用
substr
来访问char。与这里的大多数解决方案相比,这种方法非常好,原因有两个。1)它预先计算
$chars
的长度;2)您可以通过它的索引来访问char