php密码生成类实例


Posted in PHP onSeptember 24, 2014

本文实例讲述了php实现的密码生成类及其应用方法,分享给大家供大家参考。具体分析如下:

一、php密码生成类功能:

1.可设定密码长度。
2.可设定要生成的密码个数,批量生成。
3.可以指定密码的规则,字母,数字,特殊字符等。

二、用法:

GeneratePassword.class.php类文件如下:

<?php 
/** Generate Password class,根据指定规则生成password 
*  Date:  2013-12-23 
*  Author: fdipzone 
*  Ver:  1.0 
* 
*  Func: 
*  public batchGenerate 批量生成密码 
*  private generate   生成单个密码 
*  private getLetter   获取字母  
*  private getNumber   获取数字 
*  private getSpecial  获取特殊字符 
*/ 
 
class GeneratePassword{ // class start 
 
  // 密码的规则 default 
  private $_rule = array( 
   'letter' => 1, 
   'number' => 1, 
   'special' => 1 
  );
 
  private $_length = 8;         // 密码长度 
  private $_num = 1;          // 密码数量 
  private $_special = '!@#$%^&*()_+=-'; //允许的特殊字符 
 
  /** 初始化 
  * @param int  $length 密码长度 
  * @param int  $num   密码数量 
  * @param Array $rule  密码规则 
  * @param String $special 允许的特殊字符 
  */ 
  public function __construct($length=8, $num=1, $rule=array(), $special=''){ 
 
    if(isset($length) && is_numeric($length) && $length>=4 && $length<=50){ // 长度 
      $this->_length = $length; 
    } 
 
    if(isset($num) && is_numeric($num) && $num>0 && $num<=100){ // 数量 
      $this->_num = $num; 
    } 
 
    if(isset($special) && is_string($special) && $special!=''){ // 特殊字符 
      $this->_special = $special; 
    } 
 
    if($rule){ // 规则 
 
      $t_rule = array(); 
 
      if(isset($rule['letter']) && in_array($rule['letter'], array(1,2,3,4,5))){ // 1:可选用 2:必须 3:必须小写 4:必须大写 5:大小写都必须 
        $t_rule['letter'] = $rule['letter']; 
      } 
 
      if(isset($rule['number']) && in_array($rule['number'], array(1,2))){ // 1:可选用 2:必须 
        $t_rule['number'] = $rule['number']; 
      } 
 
      if(isset($rule['special']) && in_array($rule['special'], array(1,2))){ // 1:可选用 2:必须 
        $t_rule['special'] = $rule['special']; 
      } 
 
      if($t_rule){ 
        $this->_rule = $t_rule; 
      } 
    } 
  } 
 
  /** 批量生成密码 
  * @return Array 
  */ 
  public function batchGenerate(){ 
    $passwords = array(); 
    for($i=0; $i<$this->_num; $i++){ 
      array_push($passwords, $this->generate()); 
    } 
    return $passwords; 
  } 
 
  /** 生成单个密码 
  * @return String 
  */ 
  private function generate(){ 
 
    $password = ''; 
    $pool = ''; 
    $force_pool = ''; 
 
    if(isset($this->_rule['letter'])){ 
 
      $letter = $this->getLetter(); 
 
      switch($this->_rule['letter']){ 
        case 2: 
          $force_pool .= substr($letter, mt_rand(0,strlen($letter)-1), 1); 
          break; 
 
        case 3: 
          $force_pool .= strtolower(substr($letter, mt_rand(0,strlen($letter)-1), 1)); 
          $letter = strtolower($letter); 
          break; 
 
        case 4: 
          $force_pool .= strtoupper(substr($letter, mt_rand(0,strlen($letter)-1), 1)); 
          $letter = strtoupper($letter); 
          break; 
 
        case 5: 
          $force_pool .= strtolower(substr($letter, mt_rand(0,strlen($letter)-1), 1)); 
          $force_pool .= strtoupper(substr($letter, mt_rand(0,strlen($letter)-1), 1)); 
          break; 
      } 
 
      $pool .= $letter; 
    } 
    if(isset($this->_rule['number'])){ 
 
      $number = $this->getNumber(); 
 
      switch($this->_rule['number']){ 
        case 2: 
          $force_pool .= substr($number, mt_rand(0,strlen($number)-1), 1); 
          break; 
      } 
 
      $pool .= $number; 
    } 
 
    if(isset($this->_rule['special'])){ 
 
      $special = $this->getSpecial(); 
 
      switch($this->_rule['special']){ 
        case 2: 
          $force_pool .= substr($special, mt_rand(0,strlen($special)-1), 1); 
          break; 
      } 
      $pool .= $special; 
    } 
 
    $pool = str_shuffle($pool); // 随机打乱 
 
    $password = str_shuffle($force_pool. substr($pool, 0, $this->_length-strlen($force_pool))); // 再次随机打乱 
 
    return $password; 
  } 
 
  /** 字母 */ 
  private function getLetter(){ 
    $letter = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz'; 
    return $letter; 
  } 
 
  /** 数字 */ 
  private function getNumber(){ 
    $number = '1234567890'; 
    return $number; 
  } 
 
  /** 特殊字符 */ 
  private function getSpecial(){ 
    $special = $this->_special; 
    return $special; 
  } 
} // class end 
 
?>

demo示例程序如下:

<?php 
require 'GeneratePassword.class.php'; 
 
$rule = array( 
  'letter' => 5, // 必须含有大小写字母 
  'number' => 2, // 必须含有数字 
  'special' => 2 // 必须含有特殊字符 
); 
 
$special = '!@#$%_-'; 
 
$obj = new GeneratePassword(8, 10, $rule, $special); 
$passwords = $obj->batchGenerate(); 
 
echo implode('<br>', $passwords); 
?>

本文完整源码可点击此处本站下载。

相信本文所述对大家的C#程序设计有一定的借鉴价值。

PHP 相关文章推荐
PHP面向对象编程快速入门
Oct 09 PHP
php 数学运算验证码实现代码
Oct 11 PHP
基于php验证码函数的使用示例
May 03 PHP
解析PHP生成静态html文件的三种方法
Jun 18 PHP
destoon实现商铺管理主页设置增加新菜单的方法
Jun 26 PHP
php根据生日计算年龄的方法
Jul 13 PHP
Zend Framework自定义Helper类相关注意事项总结
Mar 14 PHP
PHP 极验验证码实例讲解
Sep 29 PHP
iOS+PHP注册登录系统 PHP部分(上)
Dec 26 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
Sep 13 PHP
php读取本地json文件的实例
Mar 07 PHP
laravel实现按时间日期进行分组统计方法示例
Mar 23 PHP
PHP中file_get_contents高?用法实例
Sep 24 #PHP
php实现的Cookies操作类实例
Sep 24 #PHP
PHP实现支持GET,POST,Multipart/form-data的HTTP请求类
Sep 24 #PHP
php过滤html标记属性类用法实例
Sep 23 #PHP
php广告加载类用法实例
Sep 23 #PHP
php实现根据url自动生成缩略图的方法
Sep 23 #PHP
php实现的支持imagemagick及gd库两种处理的缩略图生成类
Sep 23 #PHP
You might like
探讨:php中在foreach中使用foreach ($arr as &amp;$value) 这种类型的解释
2013/06/24 PHP
php图片缩放实现方法
2014/02/20 PHP
php实现按文件名搜索文件的远程文件查找器
2014/05/10 PHP
WordPress中转义HTML与过滤链接的相关PHP函数使用解析
2015/12/22 PHP
Joomla简单判断用户是否登录的方法
2016/05/04 PHP
php 解析xml 的四种方法详细介绍
2016/10/26 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
javascript中parentNode,childNodes,children的应用详解
2013/12/17 Javascript
javascript算法题:求任意一个1-9位不重复的N位数在该组合中的大小排列序号
2015/04/01 Javascript
使用Angular缓存父页面数据的方法
2017/01/03 Javascript
Vue数据驱动模拟实现1
2017/01/11 Javascript
jquery实现tab键进行选择后enter键触发click行为
2017/03/29 jQuery
使用validate.js实现表单数据提交前的验证方法
2018/09/04 Javascript
微信小程序页面间传值与页面取值操作实例分析
2019/04/30 Javascript
jQuery实现简单评论区功能
2020/10/26 jQuery
[07:20]2014DOTA2西雅图国际邀请赛 选手讲解积分赛第二天
2014/07/11 DOTA
python获得图片base64编码示例
2014/01/16 Python
Django查找网站项目根目录和对正则表达式的支持
2015/07/15 Python
python判断字符串编码的简单实现方法(使用chardet)
2016/07/01 Python
Python中getpass模块无回显输入源码解析
2018/01/11 Python
Django 日志配置按日期滚动的方法
2019/01/31 Python
python 利用pandas将arff文件转csv文件的方法
2019/02/12 Python
Python自动化完成tb喵币任务的操作方法
2019/10/30 Python
python将三维数组展开成二维数组的实现
2019/11/30 Python
python中提高pip install速度
2020/02/14 Python
Python如何定义有可选参数的元类
2020/07/31 Python
python破解同事的压缩包密码
2020/10/14 Python
python爬虫scrapy图书分类实例讲解
2020/11/23 Python
用HTML5制作数字时钟的教程
2015/05/11 HTML / CSS
美国顶尖折扣时尚购物网:Bluefly
2016/08/28 全球购物
美体小铺印度官网:The Body Shop印度
2019/10/17 全球购物
公司经理聘任书
2014/03/29 职场文书
艾滋病宣传标语
2014/06/25 职场文书
2016年“我们的节日·清明节”活动总结
2016/04/01 职场文书
营销策划分析:怎么策划才能更好销量产品?
2019/09/04 职场文书
python批量创建变量并赋值操作
2021/06/03 Python