我必须生成一个固定长度为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)
这仍然不一定包含每个中的至少一个.所有角色必须随机放置.所以任何帮助将不胜感激.谢谢.
我不太了解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似乎很有用.