PHP 生成随机密码
使用 PHP 开发应用程序, 尤其是网站程序, 常常需要生成随机密码, 如用户注册生成随机密码, 用户重置密码也需要生成一个随机的密码。随机密码也就是一串固定长度的字符串, 这里我收集整理了几种生成随机字符串的方法, 以供大家参考。
通过预设字符集生成随机密码
- 设置一个包含所需字符的字符串
$chars
, 例如:a-z
、A-Z
、0-9
以及特殊字符 - 在
$chars
字符串中随机取一个字符 - 重复第二步 n 次, 可得长度为 n 的密码
function generate_password($length = 8) {
// 密码字符集, 可任意添加你需要的字符
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_ []{}<>~`+=,.;:/?|';
$password = '';
for ($i = 0; $i < $length; $i++) {
// 这里提供两种字符获取方式
// 第一种是使用 substr 截取$chars中的任意一位字符;
// 第二种是取字符数组 $chars 的任意元素
// $password .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
$password .= $chars[mt_rand(0, strlen($chars) - 1)];
}
return $password;
}
简化字符集生成随机密码
我自己再用的
- 设置包含部分字符的
$chars
, 如:a-z
和0-9
- 随机从
$chars
中选择字符构建密码
function genPassword($length = 8) {
$chars = 'abcdefghijklmnopqrstuvwxyz123456789';
$password = '';
for ($i = 0; $i < $length; $i++) {
$password .= $chars[mt_rand(0, strlen($chars) - 1)];
}
return $password;
}
基于当前时间戳生成密码
- 使用
time()
函数获取当前时间戳 - 将时间戳进行
md5
加密 - 截取加密后的字符串截取 n 位即得想要的密码
function get_password($length = 8) {
$str = substr(md5(time()), 0, $length);
return $str;
}
性能测试
使用微秒计时来比较不同随机密码生成方法的运行效率
function getmicrotime() {
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
// 记录开始时间
$time_start = getmicrotime();
// 这里放要执行的 PHP 代码
// echo generate_password(6);
// 记录结束时间
$time_end = getmicrotime();
$time = $time_end - $time_start;
// 输出执行时间
echo "执行时间 $time seconds";
原文