热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

对比:PHP生成随机字符串的三种方法

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

方法一

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 转换成对应的字符。

  1. function create_password($pw_length =   
  2. {  
  3. $randpwd = ”;  
  4. for ($i = 0; $i < $pw_length; $i++)  
  5. {  
  6. $randpwd .chr(mt_rand(33, 126));  
  7. }  
  8. return $randpwd;  
  9. }  
  10. // 调用该函数,传递长度参数$pw_length = 6 
  11. echo create_password(6); 

方法二

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

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

3、重复第二步n次,可得长度为n的密码。

												
  1. function generate_password( $length = 8 ) {  
  2. // 密码字符集,可任意添加你需要的字符  
  3. $chars = ‘abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_ []{}<>~`+=,.;:/?|’;  
  4. $password = ”;  
  5. for ( $i = 0; $i < $length; $i++ )  
  6. {  
  7. // 这里提供两种字符获取方式  
  8. // 第一种是使用 substr 截取$chars中的任意一位字符;  
  9. // 第二种是取字符数组 $chars 的任意元素  
  10. // $password .substr($chars, mt_rand(0, strlen($chars) – 1), 1);  
  11. $password .= $chars[ mt_rand(0, strlen($chars) - 1) ];  
  12. }  
  13. return $password;  

方法三

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

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

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

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

时间效率对比

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

																																																				
  1. 方法一:9.8943710327148E-5 秒  
  2. 方法二:9.6797943115234E-5 秒  
  3. 方法三:0.00017499923706055 秒 

可以看出方法一和方法二的执行时间都差不多,而方法三的运行时间稍微长了点。


推荐阅读
  • 本文详细介绍了如何对一个整数的二进制表示进行逆序操作。通过多种方法,包括直接法、查表法和分治法,帮助读者全面理解和掌握这一技术。 ... [详细]
  • 本文将深入探讨C语言代码的可重用性,解释其重要性和实现方法。通过具体示例,我们将展示如何通过封装和模块化设计提高代码的可重用性。 ... [详细]
  • 近年来,区块链技术备受关注,其中比特币(Bitcoin)功不可没。尽管数字货币的概念早在上个世纪就被提出,但直到比特币的诞生,这一概念才真正落地生根。本文将详细探讨比特币、以太坊和超级账本(Hyperledger)的核心技术和应用场景。 ... [详细]
  • 【转】强大的矩阵奇异值分解(SVD)及其应用
    在工程实践中,经常要对大矩阵进行计算,除了使用分布式处理方法以外,就是通过理论方法,对矩阵降维。一下文章,我在 ... [详细]
  • 今日深入研究了树状数组,感觉难度较大,通过课件和博客辅助学习,仍有许多疑惑。主要探讨了老师推荐的三道题目,初步掌握了树状数组的基本用法。同时,还学习了逆序数和离散化的概念及其应用。 ... [详细]
  • 自动驾驶中的9种传感器融合算法
    来源丨AI修炼之路在自动驾驶汽车中,传感器融合是融合来自多个传感器数据的过程。该步骤在机器人技术中是强制性的,因为它提供了更高的可靠性、冗余性以及最终的 ... [详细]
  • 欧拉法与龙格-库塔法在微分方程求解中的对比分析
    本文探讨了计算机如何理解和模拟连续系统的动态特性,重点介绍了欧拉法和龙格-库塔法这两种常用的数值积分方法。通过详细的理论分析和MATLAB代码实现,对比了两种方法在求解微分方程时的性能和适用性。 ... [详细]
  • 本文详细介绍了Dijkstra算法,该算法用于解决图中从单个源点到其他所有顶点的最短路径问题。 ... [详细]
  • YOLO由24层ConvNet和2层FCs组成。其核心思想是将图片均匀划分为多个gridcell,每个gridcell产生两个bbox和gridcell中如果存在对象,对象是各类的 ... [详细]
  • Java作为全球最流行的编程语言之一,应用广泛。本文将详细介绍Java开发的相关岗位及其具体职责,帮助读者更好地了解这一领域的职业发展路径。 ... [详细]
  • 岭回归及其应用
    本文介绍了岭回归的基本原理,并通过Python中的sklearn库实现了岭回归模型。岭回归通过在代价函数中加入L2正则项,有效解决了多重共线性问题。 ... [详细]
  • 2023年最新指南:如何在PHP中屏蔽警告和错误
    本文详细介绍了如何在PHP中屏蔽警告和错误,包括多种方法和最佳实践,帮助开发者提升代码质量和安全性。 ... [详细]
  • ipsec 加密流程(二):ipsec初始化操作
    《openswan》专栏系列文章主要是记录openswan源码学习过程中的笔记。Author:叨陪鲤Email:vip_13031075266163.comDate:2020.1 ... [详细]
  • 最近遇到了一道关于哈夫曼树的编程题目,需要在下午之前完成。题目要求设计一个哈夫曼编码和解码系统,能够反复显示和处理多个项目,直到用户选择退出。希望各位大神能够提供帮助。 ... [详细]
  • Gty的二逼妹子序列 - 分块与莫队算法的应用
    Autumn 和 Bakser 正在研究 Gty 的妹子序列,但遇到了一个难题。他们希望计算某个区间内美丽度属于 [a, b] 的妹子的美丽度种类数。本文将详细介绍如何利用分块和莫队算法解决这一问题。 ... [详细]
author-avatar
一路向北turbo
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有