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 相关文章推荐
文件系统基本操作类
Nov 23 PHP
PHP中的cookie不用刷新就生效的方法
Feb 04 PHP
php在程序中将网页生成word文档并提供下载的代码
Oct 09 PHP
PHP限制页面只能在微信自带浏览器访问的代码
Jan 15 PHP
php数组查找函数in_array()、array_search()、array_key_exists()使用实例
Apr 29 PHP
PHP基于CURL进行POST数据上传实例
Nov 10 PHP
php实现随机显示图片方法汇总
May 21 PHP
PHP编程实现微信企业向用户付款的方法示例
Jul 26 PHP
PHP使用XMLWriter读写xml文件操作详解
Jul 31 PHP
Yii框架视图、视图布局、视图数据块操作示例
Oct 14 PHP
让whoops帮我们告别ThinkPHP6的异常页面
Mar 02 PHP
php双向队列实例讲解
Nov 17 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中的CMS的涵义
2007/03/11 PHP
在PHP中使用模板的方法
2008/05/24 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
2013/11/07 PHP
ThinkPHP的L方法使用简介
2014/06/18 PHP
一个刚完成的layout(拖动流畅,不受iframe影响)
2007/08/17 Javascript
jQuery 数据缓存data(name, value)详解及实现
2010/01/04 Javascript
jquery按回车提交数据的代码示例
2013/11/05 Javascript
Extjs Label的 fieldLabel和html属性值对齐的方法
2014/06/15 Javascript
使用Plupload实现直接上传附件至七牛云存储
2014/12/26 Javascript
jQuery中trigger()方法用法实例
2015/01/19 Javascript
js jquery获取当前元素的兄弟级 上一个 下一个元素
2015/09/01 Javascript
使用Bootstrap Tabs选项卡Ajax加载数据实现
2016/12/23 Javascript
jQuery快速实现商品数量加减的方法
2017/02/06 Javascript
JS原生带小白点轮播图实例讲解
2017/07/22 Javascript
微信小程序 websocket 实现SpringMVC+Spring+Mybatis
2017/08/04 Javascript
jQuery基于cookie实现换肤功能实例
2017/10/14 jQuery
浅谈Angular 的变化检测的方法
2018/03/01 Javascript
Node.js系列之发起get/post请求(2)
2019/08/30 Javascript
Vue 实例事件简单示例
2019/09/19 Javascript
微信小程序实现滚动加载更多的代码
2019/12/06 Javascript
vant picker+popup 自定义三级联动案例
2020/11/04 Javascript
vue3.0实现插件封装
2020/12/14 Vue.js
Python ftp上传文件
2016/02/13 Python
浅谈python import引入不同路径下的模块
2017/07/11 Python
Python中 map()函数的用法详解
2018/07/10 Python
Python实现带下标索引的遍历操作示例
2019/05/30 Python
django实现将后台model对象转换成json对象并传递给前端jquery
2020/03/16 Python
工资收入证明样本(5篇)
2014/09/16 职场文书
2014年初一班主任工作总结
2014/11/08 职场文书
2016年大学自主招生自荐信范文
2015/03/24 职场文书
2015年乡镇纪委工作总结
2015/05/26 职场文书
PHP判断是否是json字符串
2021/04/01 PHP
nginx反向代理配置去除前缀案例教程
2021/07/26 Servers
简述Java中throw-throws异常抛出
2021/08/07 Java/Android
动画《朋友游戏》公开佐藤友生绘制的开播纪念绘
2022/04/06 日漫
Mysql查询时间区间日期列表,不会由于数据表数据影响
2022/04/19 MySQL