Php 如何创建生成随机字符串的算法?
我想生成随机字符串,如:Php 如何创建生成随机字符串的算法?,php,algorithm,Php,Algorithm,我想生成随机字符串,如: sssder tvmwww 66rfdd 123123 oo007oo 1234 2020 1111 rrrr r8r8r uiuiu wewewe fefefe abced xyz.. 具体地说,我想要一个长度为5到8个字符且易于记忆的字符串。这可能吗?这取决于您希望从字符串中得到什么。从你提供的例子来看,似乎你想要一个两步走的东西;e、 g.生成三个字符的随机字符串,然后将每个字符加倍的函数;或者重复字符串;或者第一个字符重复三次,第二个字符重复两次,第三个字符只
sssder
tvmwww
66rfdd
123123
oo007oo
1234
2020
1111
rrrr
r8r8r
uiuiu
wewewe
fefefe
abced
xyz..
具体地说,我想要一个长度为5到8个字符且易于记忆的字符串。这可能吗?这取决于您希望从字符串中得到什么。从你提供的例子来看,似乎你想要一个两步走的东西;e、 g.生成三个字符的随机字符串,然后将每个字符加倍的函数;或者重复字符串;或者第一个字符重复三次,第二个字符重复两次,第三个字符只重复一次
基本上,您可能想做的是创建一个“池”,比如一个用随机选择的方法生成的合适的短字符串(所有数字、随机开始的顺序数字、顺序字母、从字典中随机选择的单词部分…)然后是一个函数,它根据一些原理对字符串进行膨胀。试试这个:PHP中的随机字母数字字符串生成器脚本
如果这是随机id或类似的东西,我推荐 uniqid(…)
http://us3.php.net/manual/en/function.uniqid.php>是一个相当复杂的脚本的源代码,该脚本通过随机选择可能性来遍历一个字符串并生成匹配字符串。包含一些示例定义。这也许有用。使用遗传算法。设置适应度函数以确定字符串的“随机性”(即两个辅音相邻吗?这不如辅音旁边的符号或数字好…但字母表中的辅音相距有多远?大小写是否相同?)让它运行几天,你一定会找到最奇特的,您所希望的最随机的5-8个字符串。有关生成指定长度的随机可用键盘字符串的简短PHP函数,请参阅(因为它看起来像密码生成器)。这是从那篇文章复制的函数
function rand_char($length) {
$random = '';
for ($i = 0; $i < $length; $i++) {
$random .= chr(mt_rand(33, 126));
}
return $random;
}
函数rand\u char($length){
$random='';
对于($i=0;$i<$length;$i++){
$random.=chr(百万兰特(33126));
}
返回$random;
}
我将从一些关于“易于记忆”的个人猜测开始:
如果有一个或多个模式,字符串通常很容易记住,例如:
- 它有重复的字符
- 它具有字符序列(a-b-c,1-2-3)
- 它“听起来”像一个单词(模仿真实单词的音素序列:“diskow”)
- 如果有个人意义(你的生日)
- 如果它重复了很多次。。。(每个人都知道π=3.1415,因为我们受过训练去了解它)尽管如此,我认为π更容易被描述为易于回忆,而不是易于记忆(存储在内存中)
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;
}
函数助记符($letters=6)
{
$result=null;
$charset=array
(
0=>数组('b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z'),
1=>数组('a','e','i','o','u'),
);
对于($i=0;$i<$letters;$i++)
{
$result.=$charset[$i%2][array_rand($charset[$i%2]);
}
返回$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;
}
函数助记符($字母=6,$digits=2)
{
$result=null;
$charset=array
(
0=>数组('b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z'),
1=>数组('a','e','i','o','u'),
);
对于($i=0;$i<$letters;$i++)
{
$result.=$charset[$i%2][array_rand($charset[$i%2]);
}
对于($i=0;$i<$digits;$i++)
{
$result.=mt_rand(0,9);
}
返回$result;
}
一个简单的方法可能是:
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;
}
定义“幻想”…你对幻想的定义是什么?您想在哪里使用这些字符串?定义fancy。你是说随机小写字符和数字吗?你想让字符和长度完全随机吗?你的问题被否决的原因是因为它没有很好的定义。这就好像你发布了“如何编写计算机程序来生成漂亮的图片?”而没有给出计算机可以理解的“漂亮”的定义。这是一段相当难看和低效的代码,我打赌我可以用5行或更少的行数来存档完全相同的结果。我忽略了解决你对“易于记忆”的担忧。你的健身功能还可以监控键盘上字母的接近程度、用户语言中单词的语音相似性、numpad上的有趣模式等。这就是我要发布的内容。