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 相关文章推荐
PHP 和 MySQL 基础教程(三)
Oct 09 PHP
Windows下的PHP5.0详解
Nov 18 PHP
PHP filter_var() 函数 Filter 函数
Apr 25 PHP
PHP 第一节 php简介
Apr 28 PHP
你可能不知道PHP get_meta_tags()函数
May 12 PHP
PHP中遇到的时区问题解决方法
Jul 23 PHP
PHP从尾到头打印链表实例讲解
Sep 27 PHP
ThinkPHP框架实现的微信支付接口开发完整示例
Apr 10 PHP
PHP批斗大会之缺失的异常详解
Jul 09 PHP
laravel解决迁移文件一次删除创建字段报错的问题
Oct 24 PHP
laravel框架学习笔记之组件化开发实现方法
Feb 01 PHP
php实现断点续传大文件示例代码
Jun 19 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
模拟flock实现文件锁定
2007/02/14 PHP
PHPWind9.0手动屏蔽验证码解决后台关闭验证码但是依然显示的问题
2016/08/12 PHP
Laravel实现自定义错误输出内容的方法
2016/10/10 PHP
Laravel5中防止XSS跨站攻击的方法
2016/10/10 PHP
javascript实现的鼠标链接提示效果生成器代码
2007/06/28 Javascript
了解jQuery技巧来提高你的代码
2010/01/08 Javascript
通过正则表达式实现表单验证是否为中文
2014/02/18 Javascript
JS+CSS实现自动改变切换方向图片幻灯切换效果的方法
2015/03/02 Javascript
Node.js返回JSONP详解
2016/05/18 Javascript
AngularJS中如何使用echart插件示例详解
2016/10/26 Javascript
原生JS封装animate运动框架的实例
2017/10/12 Javascript
Vue仿支付宝支付功能
2018/05/25 Javascript
关于RxJS Subject的学习笔记
2018/12/05 Javascript
vue项目前端错误收集之sentry教程详解
2019/05/27 Javascript
优雅的处理vue项目异常实战记录
2019/06/05 Javascript
vue如何使用外部特殊字体的操作
2020/07/30 Javascript
vue-router 2.0 跳转之router.push()用法说明
2020/08/12 Javascript
[03:14]2014DOTA2西雅图国际邀请赛 EG战队巡礼
2014/07/07 DOTA
[08:53]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS 选手采访
2021/03/11 DOTA
Python中强大的命令行库click入门教程
2016/12/26 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
2018/05/31 Python
使用python批量化音乐文件格式转换的实例
2019/01/09 Python
Python多叉树的构造及取出节点数据(treelib)的方法
2019/08/09 Python
pandas数据处理进阶详解
2019/10/11 Python
ubuntu 安装pyqt5和卸载pyQt5的方法
2020/03/24 Python
Python3爬虫mitmproxy的安装步骤
2020/07/29 Python
不同浏览器对CSS3和HTML5的支持状况
2009/10/31 HTML / CSS
HTML5里autofocus自动聚焦属性使用介绍
2016/06/22 HTML / CSS
澳大利亚快时尚鞋类市场:Billini
2018/05/20 全球购物
高校生生产实习自我鉴定
2013/09/21 职场文书
党性心得体会
2014/09/03 职场文书
城管执法人员个人对照检查材料思想汇报
2014/09/29 职场文书
2014年民政工作总结
2014/11/26 职场文书
铁路安全反思材料
2014/12/24 职场文书
感恩母亲节活动总结
2015/02/10 职场文书
Python代码,能玩30多款童年游戏!这些有几个是你玩过的
2021/04/27 Python