PHP 随机字符串生成器还有一种方式。

2022-08-30 05:46:47

我试图在PHP中创建一个随机字符串,但我绝对没有得到这个输出:

<?php
    function RandomString()
    {
        $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $randstring = '';
        for ($i = 0; $i < 10; $i++) {
            $randstring = $characters[rand(0, strlen($characters))];
        }
        return $randstring;
    }

    RandomString();
    echo $randstring;

我做错了什么?


答案 1

具体要回答这个问题,有两个问题:

  1. $randstring在回显时不在范围内。
  2. 这些字符不会在循环中串联在一起。

下面是一个包含更正的代码片段:

function generateRandomString($length = 10) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}

使用以下调用输出随机字符串:

// Echo the random string.
// Optionally, you can give it a desired string length.
echo generateRandomString();

请注意,这将生成可预测的随机字符串。如果要创建安全令牌,请参阅此答案


答案 2

注意:内部使用rand(),这不适合用于加密目的(例如生成随机密码)。你想要一个安全的随机数生成器。它也不允许字符重复。str_shuffle()

还有一种方式。

已更新(现在这会生成任意长度的字符串):

function generateRandomString($length = 10) {
    return substr(str_shuffle(str_repeat($x='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', ceil($length/strlen($x)) )),1,$length);
}

echo  generateRandomString();  // OR: generateRandomString(24)

就是这样。:)


推荐