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 相关文章推荐
初级的用php写的采集程序
Mar 16 PHP
php 判断访客是否为搜索引擎蜘蛛的函数代码
Jul 29 PHP
php自动加载机制的深入分析
Jun 08 PHP
php的4种常见运行方式
Mar 20 PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
May 13 PHP
php文件读取方法实例分析
Jun 20 PHP
php中define用法实例
Jul 30 PHP
php实现给一张图片加上水印效果
Jan 02 PHP
php实现xml转换数组的方法示例
Feb 03 PHP
浅谈PHP array_search 和 in_array 函数效率问题
Oct 15 PHP
PHP常用函数之获取汉字首字母功能示例
Oct 21 PHP
php实现微信和支付宝支付的示例代码
Aug 11 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的图形函数中显示汉字
2006/10/09 PHP
PHP中用header图片地址 简单隐藏图片源地址
2008/04/09 PHP
简单的cookie计数器实现源码
2013/06/07 PHP
PHP删除HTMl标签的三种解决方法
2013/06/30 PHP
php使用Jpgraph创建3D饼形图效果示例
2017/02/15 PHP
PHP实现删除多重数组对象属性并重新赋值的方法
2017/06/07 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
php模式设计之观察者模式应用实例分析
2019/09/25 PHP
再次更新!MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类 Ver 1.6)
2007/02/05 Javascript
加速IE的Javascript document输出的方法
2010/12/02 Javascript
jquery 操作DOM案例代码分享
2012/04/05 Javascript
javascript计算当月剩余天数(天数计算器)示例代码
2014/01/09 Javascript
jQuery操作基本控件方法实例分析
2015/12/31 Javascript
javascript html5摇一摇功能的实现
2016/04/19 Javascript
jQuery 常见小例汇总
2016/12/14 Javascript
Angular js 实现添加用户、修改密码、敏感字、下拉菜单的综合操作方法
2017/10/24 Javascript
iview实现select tree树形下拉框的示例代码
2018/12/21 Javascript
详解async/await 异步应用的常用场景
2019/05/13 Javascript
JavaScript判断对象和数组的两种方法
2019/05/31 Javascript
jquery检测上传文件大小示例
2020/04/26 jQuery
vue.js 输入框输入值自动过滤特殊字符替换中问标点操作
2020/08/31 Javascript
Python编程入门的一些基本知识
2015/05/13 Python
Apache如何部署django项目
2017/05/21 Python
python去除扩展名的实例讲解
2018/04/23 Python
对Python中9种生成新对象的方法总结
2018/05/23 Python
浅谈Python的条件判断语句if/else语句
2019/03/21 Python
python删除文件夹下相同文件和无法打开的图片
2019/07/16 Python
Python 实现一行输入多个数字(用空格隔开)
2020/04/29 Python
Lululemon英国官网:加拿大瑜伽服装品牌
2019/01/14 全球购物
个人求职信范文分享
2014/01/06 职场文书
大学社团活动策划书
2014/01/26 职场文书
酒店管理求职信范文
2014/04/06 职场文书
生物工程专业求职信
2014/09/03 职场文书
门面房租房协议书
2014/12/01 职场文书
2016年精神文明建设先进个人事迹材料
2016/02/29 职场文书
python正则表达式re.search()的基本使用教程
2021/05/21 Python