我想生成随机字符串,如:
sssder
tvmwww
66rfdd
123123
oo007oo
1234
2020
1111
rrrr
r8r8r
uiuiu
wewewe
fefefe
abced
xyz..
具体来说,我想要一个长度为5到8个字符的字符串易于记忆。这可能吗?
答案 0 :(得分:5)
Here是一个过于复杂的脚本的源代码,该脚本遍历BNF-like definition of a string并通过随机选择可能性生成匹配的字符串。 These pages包含一些示例定义。也许这可能有用。
答案 1 :(得分:5)
您正在寻找的是一个助记符字符串生成器,这是函数:
function Mnemonic($letters = 6)
{
$result = null;
$charset = array
(
0 => array('b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z'),
1 => array('a', 'e', 'i', 'o', 'u'),
);
for ($i = 0; $i < $letters; $i++)
{
$result .= $charset[$i % 2][array_rand($charset[$i % 2])];
}
return $result;
}
更新以允许字符串末尾的数字:
function Mnemonic($letters = 6, $digits = 2)
{
$result = null;
$charset = array
(
0 => array('b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z'),
1 => array('a', 'e', 'i', 'o', 'u'),
);
for ($i = 0; $i < $letters; $i++)
{
$result .= $charset[$i % 2][array_rand($charset[$i % 2])];
}
for ($i = 0; $i < $digits; $i++)
{
$result .= mt_rand(0, 9);
}
return $result;
}
答案 2 :(得分:3)
请参阅this post获取一个简短的PHP函数,以生成指定长度的随机可用键盘字符串(因为它看起来像密码生成器)。这是从该帖子复制的功能。
function rand_char($length) {
$random = '';
for ($i = 0; $i < $length; $i++) {
$random .= chr(mt_rand(33, 126));
}
return $random;
}
答案 3 :(得分:2)
这取决于你想要的字符串。从你提供的例子来看,似乎你想要一个两步的东西;例如一个生成三个字符随机字符串的函数,然后将每个字符加倍;或重复串;或者重复第一个字符三次,第二次重复两次,第三次重复一次。
基本上你可能想要做的是创建一个“池”,比如一个用随机选择的方法生成的合适的短字符串(所有数字,随机开始的连续数字,连续字母,随机选择的字部分)字典...)然后是一个根据某种原则使字符串膨胀的函数。
答案 4 :(得分:2)
试试这个:PHP中的随机字母数字字符串生成器脚本
答案 5 :(得分:2)
如果这是随机id或类似的东西我推荐
uniqid(...)
http://us3.php.net/manual/en/function.uniqid.php> http://us3.php.net/manual/en/function.uniqid.php
答案 6 :(得分:2)
使用遗传算法。设置你的健身功能来决定你的弦是多么“随机”(即两个辅音是相邻的?那么它不如辅音旁边的符号或数字那么好......但是字母表中的辅音有多远?他们是同样的情况?)让它运行几天,你将保证找到你所希望的最高,最随机的5-8个字符串。
答案 7 :(得分:2)
我将从一些关于“容易记住”的个人猜想开始:
如果有一个或多个模式,通常很容易记住字符串,例如:
编写一个程序,对根据规则生成的随机序列进行“评分”,然后选出最佳得分者。这就像蒙特卡罗方法,用于查找所需的输出。如果您不喜欢输出,可以调整评分方法。
当然,还有其他“容易记住”的字符串不符合上述要求:
答案 8 :(得分:1)
一种简单的方法可能是:
1)初始化一个空字符串
2)在[0,25]之间生成一个随机数
3)将97加到该号码上
4)为该数字生成一个字符
5)将字符附加到现有字符串
*运行步骤1-5的次数,等于字符串的长度。
说我想要长度为6-10的字符串。 对于每个字符串,您需要运行这段代码
i = rand (6,10)
str = "";
while(i--)
{
num = rand (97,97+25);
c = chr(num);
str = str.c;
}