PHP生成随机字符串(3种方法)


Posted in PHP onSeptember 25, 2015

如用户注册生成随机密码,用户重置密码也需要生成一个随机的密码。随机密码也就是一串固定长度的字符串,文章整理了几种生成随机字符串的方法。
方法一

1、在33 ? 126中生成一个随机整数,如35。

2、将35转换成对应的ASCII码字符,如35对应#。

3、重复以上1、2步骤n次,连接成n位的密码。

该算法主要用到了两个函数,mt_rand ( int $min , int $max )函数用于生成随机整数,其中 $min ? $max 为 ASCII 码的范围,这里取 33 -126 ,可以根据需要调整范围,如ASCII码表中 97 ? 122 位对应 a ? z 的英文字母,具体可参考 ASCII码表; chr ( int $ascii )函数用于将对应整数 $ascii 转换成对应的字符。

function create_password($pw_length =  
{ 
$randpwd = ”; 
for ($i = 0; $i < $pw_length; $i++) 
{ 
$randpwd .= chr(mt_rand(33, 126)); 
} 
return $randpwd; 
} 
// 调用该函数,传递长度参数$pw_length = 6 
echo create_password(6);

方法二

1、预置一个的字符串 $chars ,包括 a ? z,A ? Z,0 ? 9,以及一些特殊字符。

2、在 $chars 字符串中随机取一个字符。

3、重复第二步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; 
}

方法三

1、预置一个的字符数组 $chars ,包括 a ? z,A ? Z,0 ? 9,以及一些特殊字符。

2、通过array_rand()从数组$chars中随机选出$length个元素。

3、根据已获取的键名数组 $keys,从数组$chars取出字符拼接字符串。该方法的缺点是相同的字符不会重复取。

function make_password( $length = 8 ) 
{ 
 
// 密码字符集,可任意添加你需要的字符 
$chars = array(‘a', ‘b', ‘c', ‘d', ‘e', ‘f', ‘g', ‘h', 
‘i', ‘j', ‘k', ‘l','m', ‘n', ‘o', ‘p', ‘q', ‘r', 's', 
‘t', ‘u', ‘v', ‘w', ‘x', ‘y','z', ‘A', ‘B', ‘C', ‘D', 
‘E', ‘F', ‘G', ‘H', ‘I', ‘J', ‘K', ‘L','M', ‘N', ‘O', 
‘P', ‘Q', ‘R', ‘S', ‘T', ‘U', ‘V', ‘W', ‘X', ‘Y','Z', 
‘0′, ‘1′, ‘2′, ‘3′, ‘4′, ‘5′, ‘6′, ‘7′, ‘8′, ‘9′, ‘!', 
‘@','#', ‘$', ‘%', ‘^', ‘&', ‘*', ‘(‘, ‘)', ‘-', ‘_', 
‘[', ']‘, ‘{‘, ‘}', ‘<', ‘>', ‘~', ‘`', ‘+', ‘=', ‘,', 
‘.', ‘;', ‘:', ‘/', ‘?', ‘|'); 
 
// 在 $chars 中随机取 $length 个数组元素键名 
$keys = ($chars, $length); 
$password = ”; 
for($i = 0; $i < $length; $i++) 
{ 
// 将 $length 个数组元素连接成字符串 
$password .= $chars[$keys[$i]]; 
} 
return $password; 
}

时间效率对比

我们使用以下PHP代码,计算上面的3 个随机密码生成函数生成6 位密码的运行时间,进而对他们的时间效率进行一个简单的对比。最终得出的结果是:

方法一:9.8943710327148E-5 秒 
方法二:9.6797943115234E-5 秒 
方法三:0.00017499923706055 秒
可以看出方法一和方法二的执行时间都差不多,而方法三的运行时间稍微长了点。
通过比较三种方法的实现过程,时间效率对比,学习了PHP生成随机字符串的三种方法,希望可以对大家今后的学习有所帮助。

PHP 相关文章推荐
推荐Discuz!5的PHP代码高亮显示与实现可运行代码
Mar 15 PHP
用PHP读取和编写XML DOM的实现代码
Feb 03 PHP
php获取网页中图片、DIV内容的简单方法
Jun 19 PHP
ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码
Jun 23 PHP
PHP框架Swoole定时器Timer特性分析
Aug 19 PHP
php+html5使用FormData对象提交表单及上传图片的方法
Feb 11 PHP
php支付宝手机网页支付类实例
Mar 04 PHP
PHP实现登录注册之BootStrap表单功能
Sep 03 PHP
php实现的三个常用加密解密功能函数示例
Nov 06 PHP
Laravel 5.4.36中session没有保存成功问题的解决
Feb 19 PHP
thinkPHP5使用Rabc实现权限管理
Aug 28 PHP
PHP 模拟登陆功能实例详解
Sep 10 PHP
PHP防盗链的基本思想 防盗链的设置方法
Sep 25 #PHP
十个PHP高级应用技巧果断收藏
Sep 25 #PHP
PHP中的Session对象如何使用
Sep 25 #PHP
如何解决PHP无法实现多线程的问题
Sep 25 #PHP
PHP网站建设的流程与步骤分享
Sep 25 #PHP
ThinkPHP进程计数类Process用法实例详解
Sep 25 #PHP
php实现的Curl封装类Curl.class.php用法实例分析
Sep 25 #PHP
You might like
初步介绍PHP扩展开发经验分享
2012/09/06 PHP
关于PHP实现异步操作的研究
2013/02/03 PHP
一组PHP可逆加密解密算法实例代码
2014/01/21 PHP
Codeigniter(CI)框架分页函数及相关知识
2014/11/03 PHP
PHP图像处理之使用imagecolorallocate()函数设置颜色例子
2014/11/19 PHP
解析WordPress中的post_class与get_post_class函数
2016/01/04 PHP
PHP 对象继承原理与简单用法示例
2020/04/21 PHP
Javascript面向对象编程(二) 构造函数的继承
2011/08/28 Javascript
javascript 基础篇3 类,回调函数,内置对象,事件处理
2012/03/14 Javascript
js 输出内容到新窗口具体实现代码
2013/05/31 Javascript
JavaScript中的原型继承基础学习教程
2016/05/06 Javascript
原生js实现旋转木马轮播图效果
2017/02/27 Javascript
使用Fullpage插件快速开发整屏翻页的页面
2017/09/13 Javascript
js实现登录时记住密码的方法分析
2020/04/05 Javascript
[47:03]Ti4第二日主赛事败者组 LGD vs iG 2
2014/07/21 DOTA
[42:52]Optic vs Serenity 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
python实现文件名批量替换和内容替换
2014/03/20 Python
Python实现Const详解
2015/01/27 Python
深入浅析ImageMagick命令执行漏洞
2016/10/11 Python
python用pickle模块实现“增删改查”的简易功能
2017/06/07 Python
Python3 SSH远程连接服务器的方法示例
2018/12/29 Python
pytorch标签转onehot形式实例
2020/01/02 Python
pycharm2020.2 配置使用的方法详解
2020/09/16 Python
Bootstrap 学习分享
2012/11/12 HTML / CSS
印尼极简主义和实惠的在线家具店:Fabelio
2019/03/27 全球购物
应届生如何写自荐信
2014/01/05 职场文书
创业计划书撰写原则
2014/01/25 职场文书
个人能力自我鉴赏
2014/01/25 职场文书
小班评语大全
2014/05/04 职场文书
爱护公共设施演讲稿
2014/09/13 职场文书
生日赠语
2015/06/23 职场文书
农村老人去世追悼词
2015/06/23 职场文书
python基于tkinter实现gif录屏功能
2021/05/19 Python
利用Python+OpenCV三步去除水印
2021/05/28 Python
python解析json数据
2022/04/29 Python
MySQL约束(创建表时的各种条件说明)
2022/06/21 MySQL