随机字符串生成器

Kap*_*tai 1 php logic

我必须生成一个固定长度为10个字符的随机字符串.但诀窍是它必须包含至少一个小写字母,一个大写字母,一个数字和一个这些符号:`〜!@#$%^&*()_- + = {} [] |:;" "<>,/?

我之前使用过这个简单的函数:

function generateRandomString($length = 10)
{
    $characters='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ`~!@#$%^&*()_-+={}[]|:;"\'<>,.?/';
    $result = '';
    for ($i = 0; $i < $length; $i++)
        $result .= $characters[rand(0, strlen($characters) - 1)];
    return $result;
}
Run Code Online (Sandbox Code Playgroud)

但是此功能不包括所需的每种字符类型中的至少一种.即使我走另一条路线:

function generateRandomString($length = 10)
{
    $dig = '0123456789';
    $low = 'abcdefghijklmnopqrstuvwxyz';
    $upp = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $sym = '`~!@#$%^&*()_-+={}[]|:;"\'<>,.?/';
    $result = '';

    for ($i = 0; $i < $length; $i++)
    {
       $foo = rand(1,4);
       switch ($foo)
       {
           case 1:
               $result .= $dig[rand(0, strlen($dig)-1)];
               break;
           case 2:
               $result .= $low[rand(0, strlen($low)-1)];
               break;
           // etc.
       }
        return $result;
    }
Run Code Online (Sandbox Code Playgroud)

这仍然不一定包含每个中的至少一个.所有角色必须随机放置.所以任何帮助将不胜感激.谢谢.

NG.*_*NG. 5

我不太了解PHP,但我想你可以做这样的事情(原谅语法错误):

$result = "";
$result .= $dig[rand(0, strlen($dig) - 1];
$result .= $low[rand(0, strlen($low) - 1];
$result .= $upp[rand(0, strlen($upp) - 1];
$result .= $sym[rand(0, strlen($sym) - 1];

// at this point, you have one of each
// Go through your for loop 6 more times, and then finally:

$result = str_shuffle($result)
Run Code Online (Sandbox Code Playgroud)

希望有所帮助. str_shuffle似乎很有用.