php中生成随机密码的自定义函数代码


Posted in PHP onOctober 21, 2013

代码一:

生成一个随机密码的函数,生成的密码为小写字母与数字的随机字符串,长度可自定义。相对来说,这个比较简单

<?php
/*
 * php自动生成新密码自定义函数(带实例演示)
      适用环境: PHP5.2.x  / mysql 5.0.x
* */
function genPassword($min = 5, $max = 8)  
{  
    $validchars="abcdefghijklmnopqrstuvwxyz123456789";  
    $max_char=strlen($validchars)-1;  
    $length=mt_rand($min,$max);  
    $password = "";  
    for($i=0;$i<$length;$i )  
    {  
        $password.=$validchars[mt_rand(0,$max_char)];  
    }  
        return $password;  
    }  
    echo "新密码:".genPassword()."<br>";  
    echo "新密码:".genPassword(5,10)."<br>";
?>

下面总结了一些实例各位朋友可参考。

例1

最简洁的生成方法

function generatePassword($length=8)
{
    $chars = array_merge(range(0,9),
                     range('a','z'),
                     range('A','Z'),
                     array('!','@','$','%','^','&','*'));
    shuffle($chars);
    $password = '';
    for($i=0; $i<8; $i++) {
        $password .= $chars[$i];
    }
    return $password;
}

例2

1、在 33 ? 126 中生成一个随机整数,如 35,
2、将 35 转换成对应的ASCII码字符,如 35 对应 #
3、重复以上 1、2 步骤 n 次,连接成 n 位的密码

function create_password($pw_length = 8)
{
    $randpwd = '';
    for ($i = 0; $i < $pw_length; $i++) 
    {
        $randpwd .= chr(mt_rand(33, 126));
    }
    return $randpwd;
}
// 调用该函数,传递长度参数$pw_length = 6
echo create_password(6);

实例

<?php 
mt_srand((double) microtime() * 1000000); function gen_random_password($password_length = 32, $generated_password = ""){ 
 $valid_characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; 
 $chars_length = strlen($valid_characters) - 1; 
 for($i = $password_length; $i--; ) { 
  //$generated_password .= $valid_characters[mt_rand(0, $chars_length)]; 
  $generated_password .= substr($valid_characters, (mt_rand()%(strlen($valid_characters))), 1); 
 } 
 return $generated_password; 
} 
?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<title>php 密码生成器 v 4.0</title> 
<style type="text/css"> 
body { 
 font-family: Arial; 
 font-size: 10pt; 
} 
</style> 
</head> 
<body> 
<span style="font-weight: bold; font-size: 15pt;">密码生成器v4.0 by freemouse</span><br /><br /> 
<?php 
if (isset($_GET['password_length'])){ 
 if(preg_match("/([0-9]{1,8})/", $_GET['password_length'])){ 
  print("密码生成成功:<br /> 
<span style="font-weight: bold">" . gen_random_password($_GET['password_length']) . "</span><br /><br />n"); 
 } else { 
  print("密码长度不正确!<br /><br />n"); 
 } 
} 
print <<< end
请为密码生成其指定生成密码的长度:<br /><br /> 
<form action="{$_SERVER['PHP_SELF']}" method="get"> 
 <input type="text" name="password_length"> 
 <input type="submit" value="生成"> 
</form> 
end; 
?> 
</body> 
</html>

例4

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 = array_rand($chars, $length);
    $password = '';
    for($i = 0; $i < $length; $i++)
    {
        // 将 $length 个数组元素连接成字符串
        $password .= $chars[$keys[$i]];
    }
    return $password;
}
PHP 相关文章推荐
用mysql触发器自动更新memcache的实现代码
Oct 11 PHP
PHP 文件系统详解
Sep 13 PHP
利用PHP实现图片等比例放大和缩小的方法详解
Jun 06 PHP
解析PHP高效率写法(详解原因)
Jun 20 PHP
浅析php中抽象类和接口的概念以及区别
Jun 27 PHP
使用php伪造referer的方法 利用referer防止图片盗链
Jan 20 PHP
thinkphp缓存技术详解
Dec 09 PHP
PHP代码实现表单数据验证类
Jul 28 PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
Dec 22 PHP
Yii框架日志记录Logging操作示例
Jul 12 PHP
PHP赋值的内部是如何跑的详解
Jan 13 PHP
PHP观察者模式实例分析【对比JS观察者模式】
May 22 PHP
php中读写文件与读写数据库的效率比较分享
Oct 19 #PHP
PHP中include与require使用方法区别详解
Oct 19 #PHP
php文件上传的简单实例
Oct 19 #PHP
php上传文件,创建递归目录的实例代码
Oct 18 #PHP
php用户注册页面利用js进行表单验证具体实例
Oct 17 #PHP
10 个经典PHP函数
Oct 17 #PHP
php中怎么搜索相关联数组键值及获取之
Oct 17 #PHP
You might like
php基础学习之变量的使用
2011/06/09 PHP
一个PHP二维数组排序的函数分享
2014/01/17 PHP
[原创]PHPCMS遭遇会员投稿审核无效的解决方法
2017/01/11 PHP
php5对象复制、clone、浅复制与深复制实例详解
2019/08/14 PHP
解决jquery .ajax 在IE下卡死问题的解决方法
2009/10/26 Javascript
JavaScript类和继承 constructor属性
2010/03/04 Javascript
JS 显示当前日期与时间的代码
2010/03/24 Javascript
GridView中获取被点击行中的DropDownList和TextBox中的值
2013/07/18 Javascript
提高jQuery性能的十个诀窍
2013/11/14 Javascript
JS实现三级折叠菜单特效,其它级可自动收缩
2015/08/06 Javascript
jquery+CSS实现的水平布局多级网页菜单效果
2015/08/24 Javascript
jQuery插件Timelinr 实现时间轴特效
2015/10/04 Javascript
使用递归遍历对象获得value值的实现方法
2016/06/14 Javascript
只需五句话搞定JavaScript作用域(经典)
2016/07/26 Javascript
再谈Javascript中的异步以及如何异步
2016/08/19 Javascript
基于JS实现9种不同的面包屑和分布式多步骤导航效果
2017/02/21 Javascript
jquery操作ul的一些操作笔记整理(干货)
2017/08/31 jQuery
10个经典的网页鼠标特效代码
2018/01/09 Javascript
JS实现不用中间变量temp 实现两个变量值得交换方法
2018/02/04 Javascript
非常实用的jQuery代码段集锦【检测浏览器、滚动、复制、淡入淡出等】
2019/08/08 jQuery
JS数组方法concat()用法实例分析
2020/01/18 Javascript
如何使用Jquery动态生成二级选项列表
2020/02/06 jQuery
python中PIL安装简单教程
2016/04/21 Python
在java中如何定义一个抽象属性示例详解
2017/08/18 Python
利用Pycharm断点调试Python程序的方法
2018/11/29 Python
python实现趣味图片字符化
2019/04/30 Python
python实现图片上添加图片
2019/11/26 Python
解决torch.autograd.backward中的参数问题
2020/01/07 Python
python IDLE添加行号显示教程
2020/04/25 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
2020/05/25 Python
在HTML5中使用MathML数学公式的简单讲解
2016/02/19 HTML / CSS
eBay瑞士购物网站:eBay.ch
2018/12/24 全球购物
定制别致的瑜伽垫:Sugarmat
2019/06/21 全球购物
关爱留守儿童标语
2014/06/18 职场文书
医院党建工作总结2015
2015/05/26 职场文书
公司员工培训管理制度
2015/08/04 职场文书