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上的有趣模式等。这就是我要发布的内容。