单行PHP随机字符串生成器?

2022-08-30 12:12:54

我正在寻找生成随机/唯一字符串的最短方法,为此我使用以下两种方法:

$cClass = sha1(time());

$cClass = md5(time());

但是,我需要字符串以字母开头,我正在查看base64编码,但这在最后增加了,然后我需要摆脱它。==

用一行代码实现这一目标的最佳方法是什么?


更新:

PRNDL提出了一个很好的建议,我最终使用了它,但有点修改

echo substr(str_shuffle(abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ),0, 1) . substr(str_shuffle(aBcEeFgHiJkLmNoPqRstUvWxYz0123456789),0, 31)

将产生32个字符模仿md5哈希,但它总是会将第一个字符产生字母字母,就像这样;

solution 1

然而,Uours确实改进了他的答案;

substr(str_shuffle("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 1).substr(md5(time()),1);

更短更甜

Anonymous2011的另一个建议非常棒,但是由于某种原因,第一个字符总是M,N,Y,Z,所以不符合我的目的,但会是选择的答案,顺便说一句,有谁知道为什么它总是会产生这些特定的字母?

这是我修改后的版本的预览

echo  rtrim(base64_encode(md5(microtime())),"=");

runner up


答案 1

与其洗牌字母字符串,不如获得一个随机字符更快。

从字符串中获取单个随机字符,然后将在追加之前,请从中删除一个字符,以便将生成的字符串长度保持在32个字符:md5( time( ) )md5( time( ) )

substr("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", mt_rand(0, 51), 1).substr(md5(time()), 1);

小写版本 :

substr("abcdefghijklmnopqrstuvwxyz", mt_rand(0, 25), 1).substr(md5(time()), 1);

或者更短,更快的小写版本:

chr(mt_rand(97, 122)).substr(md5(time()), 1);

/* or */

chr(mt_rand(ord('a'), ord('z'))).substr(md5(time()), 1);


给任何试图在一秒钟内生成许多随机字符串的人的注意:
由于
返回时间(以秒为单位),因此在整个给定的时间秒内将相同,因此,如果在一秒钟内生成了许多随机字符串,则这些字符串可能最终会有一些重复项。time( )md5( time( ) )


我已经使用以下代码进行了测试。这个测试小写版本:

    $num_of_tests = 100000;

    $correct = $incorrect = 0;

    for( $i = 0; $i < $num_of_tests; $i++ )
    {
        $rand_str = substr( "abcdefghijklmnopqrstuvwxyz" ,mt_rand( 0 ,25 ) ,1 ) .substr( md5( time( ) ) ,1 );

        $first_char_of_rand_str = substr( $rand_str ,0 ,1 );

        if( ord( $first_char_of_rand_str ) < ord( 'a' ) or ord( $first_char_of_rand_str ) > ord( 'z' ) )
        {
            $incorrect++;
            echo $rand_str ,'<br>';
        }
        else
        {
            $correct++;
        }
    }

    echo 'Correct: ' ,$correct ,' . Incorrect: ' ,$incorrect ,' . Total: ' ,( $correct + $incorrect );

答案 2

我发现了这样的东西:

$length = 10;
$randomString = substr(str_shuffle(md5(time())),0,$length);
echo $randomString;

推荐