文章来源:PHP开发学习门户

地址:http://www.phpthinking.com/archives/523

使用PHP开发应用程序,尤其是站点程序。经常须要生成随机password,如用户注冊生成随机password,用户重置password也须要生成一个随机的password。随机password也就是一串固定长度的字符串。这里我收集整理了几种生成随机字符串的方法,以供大家參考。

方法一:

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

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

3、反复以上 1、2 步骤 n 次。连接成 n 位的password

该算法主要用到了两个函数,mt_rand ( int $min ,
int $max )
函数用于生成随机整数。当中 $min – $max 为 ASCII 码的范围。这里取 33 -126 ,能够依据须要调整范围。如ASCII码表中 97 – 122 位相应 a – z 的英文字母,详细可參考  ASCII码表; chr
( int $ascii )
函数用于将相应整数 $ascii 转换成相应的字符。

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

方法二:

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

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

3、反复第二步 n 次,可得长度为 n 的password

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

方法三:

算法简单,代码简短,仅仅是由于md5()函数的返回值的缘故。生成的password仅仅包含字母和数字。只是也算是一个不错的方法。

算法思想:

1、time() 获取当前的 Unix 时间戳

2、将第一步获取的时间戳进行 md5() 加密

3、将第二步加密的结果,截取 n 位即得想要的password

  1.  
  2. function get_password( $length = 8 ) 
  3. { 
  4.     $str = substr(md5(time()), 0, 6); 
  5.     return $str; 
  6. } 
  7. echo get_password(6); 

时间效率对照

我们使用下面PHP代码,计算上面的 3 个随机password生成函数生成 6 位password的执行时间。进而对他们的时间效率进行一个简单的对照。

  1.  
  2. function getmicrotime(){ 
  3.     list($usec, $sec) = explode(" ",microtime()); 
  4.     return ((float)$usec + (float)$sec); 
  5. } 
  6.   
  7. // 记录開始时间 
  8. $time_start = getmicrotime(); 
  9.      
  10. // 这里放要运行的PHP代码,如: 
  11. // echo create_password(6); 
  12.   
  13. // 记录结束时间 
  14. $time_end = getmicrotime(); 
  15. $time = $time_end - $time_start; 
  16.  
  17.  // 输出运行总时间  
  18. echo "运行时间 $time seconds"; 

终于得出的结果是:

方法一:9.8943710327148E-5 秒

方法二:9.6797943115234E-5 秒

方法三:3.4093856811523E-5 秒

能够看出方法一和方法二的执行时间都差点儿相同,方法四执行时间最短。

php生成随机password的几种方法的更多相关文章

  1. JS实现随机颜色的3种方法与颜色格式的转化

    JS实现随机颜色的3种方法与颜色格式的转化   随机颜色和颜色格式是我们在开发中经常要用到的一个小功能,网上相关的资料也很多,想着有必要总结一下自己的经验.所以这篇文章主要介绍了JS实现随机颜色的3种 ...

  2. javascript生成新标签的三种方法

    javascript生成新标签的三种方法:http://www.cnblogs.com/online-link/p/6062423.html

  3. Python - 生成随机验证码的3种实现方式

    生成6位随机验证码的3种实现方式如下: 1. 简单粗暴型:所有数字和字母都放入字符串: 2. 利用ascii编码的规律,遍历获取字符串和数字的字符串格式: 3. 引用string库. 方法1代码: i ...

  4. Asp.net生成随机不重复的函数(方法)

    // 生成三位毫秒字串         public static string Get_mSec()         {             string mSec = System.DateT ...

  5. MySQL查询随机数据的4种方法和性能对比

    从MySQL随机选取数据也是我们最常用的一种发发,其最简单的办法就是使用”ORDER BY RAND()”,本文介绍了包括ORDER BY RAND()的4种获取随机数据的方法,并分析了各自的优缺点. ...

  6. ABAP 动态生成内表的几种方法

    最近要写个程序,既有更新的,也有删除的,需要涉及到很多系统表,如果一个表一个表进行更新或者删除太慢了,于是就想通过创建动态内表来实现这些功能,在网上找了一些资料,经过多次尝试,终于测试成功了.网上讲述 ...

  7. 生成mif文件的几种方法总结

    mif文件就是存储器初始化文件,即memory initialization file,用来配置RAM或ROM中的数据.生成QuartusII11.0可用的mif文件,有如下几种方式: 方法1:利用Q ...

  8. 如何使用php生成唯一ID的4种方法

    php生成唯一ID的应用场景非常普遍,如临时缓存文件名称,临时变量,临时安全码等,uniqid()函数基于以微秒计的当前时间,生成一个唯一的 ID.由于生成唯一ID与微秒时间关联,因此ID的唯一性非常 ...

  9. php获取随机字符串的几种方法

    方法一:shuffle函数(打乱数组)和mt_rand函数(生成随机数,比rand速度快四倍) /** * 获得随机字符串 * @param $len 需要的长度 * @param $special ...

随机推荐

  1. BZOJ 3798 分块打表

    思路: 这题思路真是奇妙 先跑个暴力 每隔1e5打个表 块内暴力 打表程序: (开O3 15秒就跑完了) //By SiriusRen #include <bits/stdc++.h> u ...

  2. DML和DQL语句

    DML操作: a.插入单行数据:      INSERT INTO 表名(列名,列名,...) VALUE(列值,列值,...); 表的字段名是可选的,如果省略,则一次插入所有字段 多个列表和多个值之 ...

  3. SQL--大解密之组织数据

    今天为大家带来的是数据库的基本用法   首先带大家了解下数据库. 大量的数据正在不断产生,伴随而来的是如何安全有效地存储.检索.管理他们. 对数据的有效存储.高效访问.方便共享和安全控制等问题成为信息 ...

  4. JS——scroll动画

    固定导航栏 1.计算导航栏到顶部的距离值 2.当scrollTop值大于这个距离值就添加定位,当小于距离值后解除定位 注意事项:当导航栏添加定位之后,导航栏就脱离了文档流,也就是不占位了,下面的盒子就 ...

  5. php判断form数据是否为POST而来,判断数据提交方式

    //判断form数据是否为POST而来,判断数据提交方式 if ($_SERVER['REQUEST_METHOD'] != 'POST') { // 非 POST 来路,做警告或你想做的事 retu ...

  6. 常见的Xshell运行命令

    最近接触到了Xshell这个软件,使用这个软件我们来进行连接Linux系统,进去之后我们可能会两眼一抹黑,小编就带大家来学些常见的shell命令. 首先我们要跟大家从最简单的聊起,我们进入Xshell ...

  7. Lua练习题集嚢

    --1.table.sort() am = {"cc","nn","ll","dd"} arr = function ( ...

  8. js for 循环 添加tr td 算法

    StringBuffer sb=new StringBuffer(); int n = 5; sb.append("<tr>"); List<MenuBean&g ...

  9. 关于img的一个小知识点

    这两天在撸代码的时候发现图片的最下面总是会留一条空白,刚开始不知道为什么,但是UI拿刀对我说去掉它,瑟瑟发抖的我找了下原因及解决方案. 原因:img 是一个inline-block标签,而这个标签的v ...

  10. PHP常用系统设置整理

    1.设置时间脚本执行时间 set_time_limit(0); 2.设置最大执行内存 ini_set('memory_limit','1024M');//设置内存 memory_get_usage() ...