php怎么添加随机字符串
时间 : 2023-04-26 07:36:02声明: : 文章内容来自网络,不保证准确性,请自行甄别信息有效性

在 PHP 中生成随机字符串有多种方法,比如可以使用 PHP 标准库自带的 rand() 函数或 mt_rand() 函数,也可以使用 PHP 扩展库中的 random_bytes() 函数或 openssl_random_pseudo_bytes() 函数。下面介绍两种常用的生成随机字符串的方法。

方法一:使用 rand() 函数或 mt_rand() 函数

使用 rand() 函数或 mt_rand() 函数可以生成指定长度和指定字符集的随机字符串,代码如下:

```php

/**

* 生成指定长度和指定字符集的随机字符串

* @param int $length 随机字符串长度

* @param string $charSet 随机字符串字符集,默认为 a-zA-Z0-9

* @return string 随机字符串

*/

function generateRandomString($length, $charSet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789') {

$str = '';

$charSetLength = strlen($charSet);

for ($i = 0; $i < $length; $i++) {

$str .= $charSet[rand() % $charSetLength];

}

return $str;

}

// 生成长度为 10 的随机字符串,默认字符集为 a-zA-Z0-9

echo generateRandomString(10); // 输出:s6wdhJ7V4U

// 生成长度为 16 的随机字符串,字符集为 a-zA-Z

echo generateRandomString(16, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'); // 输出:sBkqKKDIKDKVtcqG

使用 mt_rand() 函数代替 rand() 函数可以使随机数生成更加均匀,如下:

```php

/**

* 生成指定长度和指定字符集的随机字符串

* @param int $length 随机字符串长度

* @param string $charSet 随机字符串字符集,默认为 a-zA-Z0-9

* @return string 随机字符串

*/

function generateRandomString($length, $charSet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789') {

$str = '';

$charSetLength = strlen($charSet);

for ($i = 0; $i < $length; $i++) {

$str .= $charSet[mt_rand(0, $charSetLength - 1)];

}

return $str;

}

// 生成长度为 10 的随机字符串,默认字符集为 a-zA-Z0-9

echo generateRandomString(10); // 输出:s6wdhJ7V4U

// 生成长度为 16 的随机字符串,字符集为 a-zA-Z

echo generateRandomString(16, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'); // 输出:sBkqKKDIKDKVtcqG

方法二:使用 random_bytes() 函数或 openssl_random_pseudo_bytes() 函数

使用 random_bytes() 函数或 openssl_random_pseudo_bytes() 函数可以生成指定长度的强随机数,然后根据需要将强随机数转换成字符串。代码如下:

```php

/**

* 生成指定长度和指定字符集的随机字符串

* @param int $length 随机字符串长度

* @param string $charSet 随机字符串字符集,默认为 a-zA-Z0-9

* @return string 随机字符串

*/

function generateRandomString($length, $charSet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789') {

$str = '';

$charSetLength = strlen($charSet);

$bytes = random_bytes($length);

for ($i = 0; $i < $length; $i++) {

$index = ord($bytes[$i]) % $charSetLength;

$str .= $charSet[$index];

}

return $str;

}

// 生成长度为 10 的随机字符串,默认字符集为 a-zA-Z0-9

echo generateRandomString(10); // 输出:s6wdhJ7V4U

// 生成长度为 16 的随机字符串,字符集为 a-zA-Z

echo generateRandomString(16, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'); // 输出:sBkqKKDIKDKVtcqG

使用 openssl_random_pseudo_bytes() 函数可以生成更加安全的强随机数,如下:

```php

/**

* 生成指定长度和指定字符集的随机字符串

* @param int $length 随机字符串长度

* @param string $charSet 随机字符串字符集,默认为 a-zA-Z0-9

* @return string 随机字符串

*/

function generateRandomString($length, $charSet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789') {

$str = '';

$charSetLength = strlen($charSet);

$bytes = openssl_random_pseudo_bytes($length);

for ($i = 0; $i < $length; $i++) {

$index = ord($bytes[$i]) % $charSetLength;

$str .= $charSet[$index];

}

return $str;

}

// 生成长度为 10 的随机字符串,默认字符集为 a-zA-Z0-9

echo generateRandomString(10); // 输出:s6wdhJ7V4U

// 生成长度为 16 的随机字符串,字符集为 a-zA-Z

echo generateRandomString(16, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'); // 输出:sBkqKKDIKDKVtcqG

需要注意的是,使用 random_bytes() 函数或 openssl_random_pseudo_bytes() 函数在生成强随机数时需要提供足够的熵,如果系统的熵不足会导致阻塞。

在 PHP 中添加随机字符串可以通过使用内置函数生成随机字符串。常用的函数是 `uniqid()` 和 `mt_rand()`。

使用 `uniqid()` 函数可以生成一个基于当前时间和微秒数的唯一字符串。该函数接受两个参数,第一个是前缀字符串,第二个是布尔值,表示是否添加随机值。如果第二个参数为 true,则会在字符串末尾添加 6 个随机字符。示例代码如下:

```php

$prefix = 'example_';

$randomString = uniqid($prefix, true);

echo $randomString; // 输出:example_5fd3d3c29e5ba5.42829069

使用 `mt_rand()` 函数可以生成给定范围内的随机整数。可以将生成的随机整数转换成字符串作为随机字符串的一部分。示例代码如下:

```php

$min = 100000;

$max = 999999;

$randomInt = mt_rand($min, $max);

$randomString = 'example_' . strval($randomInt);

echo $randomString; // 输出:example_123456

除了以上两种函数,还有很多其他的方式可以生成随机字符串,例如使用 `random_bytes()` 函数和 `openssl_random_pseudo_bytes()` 函数。选择哪种方式主要是根据需求来定。如果只需要一个简单的随机字符串,使用内置函数就足够了。但如果需要更高强度的随机性,建议使用专门的外部库。