生成随机字符串的需求对于令牌、随机密码等功能非常常见。本文就总结以下通过 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