生成(伪)随机字母数字字符串

87

我该如何在PHP中生成一个(伪)随机的字母数字字符串,例如:“d79jd8c”?


解决方案简短而独特。 请参考此链接https://dev59.com/52Mk5IYBdhLWcg3wvARo#34467730 - Saud Khan
方法 Random::alphanumericString($length) 可以实现你想要的功能。如果你想自己构建,请不要使用除 PHP 内置的 random_bytesrandom_int 之外的任何随机源。 - caw
18个回答

1
function generateRandomString($length = 10) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}
echo generateRandomString();

1

首先列出所需的字符

$chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

使用str_shuffle($string)函数。该函数将为您提供一个随机洗牌的字符串。
$alpha=substr(str_shuffle($chars), 0, 50);

50是字符串的长度。


1
如果你想以非常简单的方式实现这个功能,可以利用现有的PHP函数。这是我使用的代码:
substr( sha1( time() ), 0, 15 )
time()会返回自纪元以来经过的秒数,sha1()将其加密成一个由0-9a-f组成的字符串,substr()让你选择长度。你不必从第0个字符开始,两个数字之间的差异就是字符串的长度。

0

Jeremy的答案很棒。如果像我一样,您不确定如何实现range()函数,您可以查看我的使用range()的版本。

<?php
$character_array = array_merge(range('a', 'z'), range(0, 9));
$string = "";
    for($i = 0; $i < 6; $i++) {
        $string .= $character_array[rand(0, (count($character_array) - 1))];
    }
echo $string;
?>

这个代码与Jeremy的代码完全相同,只是使用了合并数组而不是字符串,并且使用count()函数代替了strlen()函数。


2
它需要是 range('a','z'); - Mehdi Karamosly

0
public function randomString($length = 8)
{
    $characters = implode([
        'ABCDEFGHIJKLMNOPORRQSTUWVXYZ',
        'abcdefghijklmnoprqstuwvxyz',
        '0123456789',
        //'!@#$%^&*?'
    ]);

    $charactersLength = strlen($characters) - 1;
    $string           = '';

    while ($length) {
        $string .= $characters[mt_rand(0, $charactersLength)];
        --$length;
    }

    return $string;
}

你有大小写字符串中不同数量的字符。这段代码与已经发布在这里的所有其他变体相比有什么优势吗? - magras

0

0

使用类型提示/ rand_int 进行真正的随机性是现代的方法

function random_string(int $size): string
{
    $characters = array_merge(
        range(0, 9),
        range('A', 'Z')
    );

    $string = '';
    $max = count($characters) - 1;
    for ($i = 0; $i < $size; $i++) {
        $string .= $characters[random_int(0, $max)];
    }

    return $string;
}

0

1行:

$FROM = 0; $TO = 'zzzz';
$code = base_convert(rand( $FROM ,base_convert( $TO , 36,10)),10,36);
echo $code;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接