4PHP生成随机密码的方法及性能比较随机密码是一串固定长度的字符串。这里我收集整理了几种生成随机字符串的方法,供大家参考。方法一:1.生成一个33-126之间的随机整数,比如35,2.把35转换成对应的ASCII码字符,比如35对应#3,重复上面的步骤1和2n次,连接起来inton-digit密码算法主要用到两个函数,mt_rand(int$min,int$max)函数用来生成随机整数,其中$min-$max是ASCII码的范围,这里是33-126,你可以根据需要调整范围,比如ASCII码表中的97-122位对应英文字母a-z。详见ASCII码表;chr(int$ascii)函数用于将相应的整数$ascii转换为相应的字符。查看sourceprint?functioncreate_password($pw_length=8){$randpwd='';for($i=0;$i<$pw_length;$i++){$randpwd.=chr(mt_rand(33,126));}返回$randpwd;}//调用这个函数,传递长度参数$pw_length=6echocreate_password(6);方法二:1.预设一个字符串$chars,包括a-z,A-Z,0-9,以及一些特殊字符2.从$chars字符串中随机选择一个字符3.重复第二步n次得到一个长度为password的n。viewsourceprint?functiongenerate_password($length=8){//密码字符集,可以随便加,.;:/?|';$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、从数组$chars中随机选择,通过array_rand()产生$length元素3、根据获取的键名数组$keys,从数组$chars中取出字符拼接串。这种方法的缺点是不会重复取同一个字符。查看sourceprint?functionmake_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=array_rand($chars,$length);$password='';for($i=0;$i<$length;$i++){//设置$length数组元素为拼接成一个字符串$password.=$chars[$keys[$i]];}return$password;}方法四:该方法是蓝色理想转载本文后,由网友提供的新方法。算法简单,代码短,但是由于md5()函数的返回值,生成的密码只有字母和数字,不失为一个好方法。算法思路:1.time()获取当前Unix时间戳2.将第一步获取的时间戳用md5()进行加密3.从第二步的加密结果中截取n位得到想要的密码查看sourceprint?functionget_password($length=8){$str=substr(md5(time()),0,6);return$str;}时间效率比较我们使用下面的PHP代码来计算以上四种随机密码生成函数的生成6位密码的运行时间,然后对它们的时间效率做一个简单的比较。viewsourceprint?最终结果为:方法一:9.8943710327148E-5秒方法二:9.6797943115234E-5秒方法三:0.00017499923706055秒方法四:3.4093856811523E-5秒可以看到方法一和方法二的执行时间差不多,方法四的运行时间最短,方法三的运行时间稍长。
