Laravel 生成随机字符串的方法

生成随机字符串的需求对于令牌、随机密码等功能非常常见。本文就总结以下通过 Laravel 辅助函数和原生 PHP 函数生成随机字符串的几种方法。

1. str()->random()

最流行的辅助函数之一。

str()->random();
//生成类似:NmLj2RhDdnrXyzbg

也可以指定要生成的字符数:

str()->random(5);
// 生成类似:w9RUI

2. str()->password()

可以生成给定长度的安全的随机密码。

默认情况下,密码长32个字符,包括字母,数字,符号和空格的组合。

str()->password()
 
// 生成类似:
// ;HnM1O$]{8fF7yL7/obYaay(LGdPYr<b

通过查看Laravel源代码,可以找到此功能的更多参数(文档中没有):

public static function password(
    $length = 32,
    $letters = true,
    $numbers = true,
    $symbols = true,
    $spaces = false) { /* ... */ }

3. Faker

Laravel 有一个 fake() 助手,可以解析成一个 Faker 包。在 Faker 的帮助下,你可以生成各种东西。

可以使用 faker 的 asciify() 或 regexify() 方法生成随机字符串。生成 8 个字符的随机字符串用法类似于:

fake()->asciify('********');
// j!}IwNl0

fake()->regexify('[A-Za-z0-9]{8}')
// jbVrK8JV

randomNumber() 方法可用于生成随机数。

fake()->randomNumber();
// 28041

4. str()->mask()

如果你想在生成的字符串中隐藏一些字符,可以使用 str($string)->mask() 来实现。比如与 Faker 结合起来。

str(fake()->creditCardNumber())->mask("*", -4);
// 455688158327****

这对于手机号或身份证号的隐藏显示十分有帮助。

5. PHP 函数

如果您不想使用 Laravel 辅助函数,或者因为您使用的是某些辅助函数不存在的旧版本而无法使用,那么也可以使用原生的 PHP 函数。

要生成随机字符串,可以使用 uniqid() 。 默认情况下,返回的字符串长度为 13 个字符。

uniqid()
// 664da16a1eb3b

另一种选择是将 random_bytes() 和 bin2hex() PHP 函数组合在一起,生成一个 20 个字符的字符串。

bin2hex(random_bytes(10));
// f81b40db75c0697057a8

对于随机数,可以使用 mt_rand() 。默认最小值为零,最大值由 mt_getrandmax 生成。

mt_rand();
// 511137210
 
mt_rand(10, 69);
// 54