【发布时间】:2013-05-25 16:55:26
【问题描述】:
我必须生成一个固定长度为 10 个字符的随机字符串。但诀窍是它必须至少包含一个小写字母、一个大写字母、一个数字和以下符号之一:`~!@#$%^&*()_-+={}[]|:;" ',.?/
我之前用过这个简单的功能:
function generateRandomString($length = 10)
{
$characters='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ`~!@#$%^&*()_-+={}[]|:;"\'<>,.?/';
$result = '';
for ($i = 0; $i < $length; $i++)
$result .= $characters[rand(0, strlen($characters) - 1)];
return $result;
}
但此功能不包括所需的每种字符类型中的至少一种。即使我走另一条路:
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;
}
这仍然不一定包含至少一个。 所有字符必须随机放置。所以任何帮助将不胜感激。谢谢你。
【问题讨论】:
-
do { CREATE_RANDOM_STRING } while (!CONTAINSLOWERCASELETTER || !CONTAINSUPPERCASELETTER || !CONTAINSSYMBOL)怎么样? -
我认为您需要检查您的字符串是否符合您的要求,如果不符合,请创建一个新字符串或对其进行修改,直到符合要求为止。