如何创建用于生成随机字符串的算法?

cod*_*rex 2 php algorithm

我想生成随机字符串,如:

sssder
tvmwww
66rfdd
123123
oo007oo
1234
2020
1111
rrrr
r8r8r
uiuiu
wewewe
fefefe
abced
xyz..
Run Code Online (Sandbox Code Playgroud)

具体来说,我想要一个长度为5到8个字符的字符串,很容易记住.这可能吗?

moo*_*dow 5

是一个相当过于复杂的脚本的源代码,该脚本遍历类似BNF的字符串定义,并通过随机选择可能性来生成匹配的字符串.这些页面包含一些示例定义.也许这可能有用.


Ali*_*xel 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;
}
Run Code Online (Sandbox Code Playgroud)

更新为允许字符串末尾的数字:

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;
}
Run Code Online (Sandbox Code Playgroud)