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正则
Jul 07 PHP
自动跳转中英文页面
Oct 09 PHP
用PHP制作静态网站的模板框架(二)
Oct 09 PHP
PHP常用开发函数解析之数组篇[未完结]
Jul 30 PHP
php中unlink()、mkdir()、rmdir()等方法的使用介绍
Dec 21 PHP
windows7下安装php的imagick和imagemagick扩展教程
Jul 04 PHP
基于PHP实现商品成交时发送短信功能
May 11 PHP
php格式化json函数示例代码
May 12 PHP
Zend Framework校验器Zend_Validate用法详解
Dec 09 PHP
php使用PDO事务配合表格读取大量数据插入操作实现方法
Feb 16 PHP
Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
Oct 11 PHP
PHP基于回溯算法解决n皇后问题的方法示例
Nov 07 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反向代理类代码
2014/08/15 PHP
PHP实现将HTML5中Canvas图像保存到服务器的方法
2014/11/28 PHP
PHP安全上传图片的方法
2015/03/21 PHP
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
2007/04/21 Javascript
javascript 写类方式之九
2009/07/05 Javascript
javaScript面向对象继承方法经典实现
2013/08/20 Javascript
探讨js中的双感叹号判断
2013/11/11 Javascript
js判断60秒以及倒计时示例代码
2014/01/24 Javascript
利用Jquery实现可多选的下拉框
2014/02/21 Javascript
JavaScript中的object转换成number或string规则介绍
2014/12/31 Javascript
JavaScript获得指定对象大小的方法
2015/07/01 Javascript
javascript中数组方法汇总
2015/07/07 Javascript
jQuery实现简洁的导航菜单效果
2015/11/23 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
Node.js中使用jQuery的做法
2016/08/17 Javascript
基于JS实现bookstore静态页面的实例代码
2017/02/22 Javascript
React-router 4 按需加载的实现方式及原理详解
2017/05/25 Javascript
JavaScript实现图片无缝滚动效果
2017/07/07 Javascript
利用js编写网页进度条效果
2017/10/08 Javascript
vue表单自定义校验规则介绍
2018/08/28 Javascript
[01:13]DOTA2群星解读国服召集令 一起说出回归的理由
2013/07/17 DOTA
[50:15]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
python爬虫入门教程--HTML文本的解析库BeautifulSoup(四)
2017/05/25 Python
Python判断文件和字符串编码类型的实例
2017/12/21 Python
python基于ID3思想的决策树
2018/01/03 Python
python如何统计序列中元素
2020/07/31 Python
python获取酷狗音乐top500的下载地址 MP3格式
2018/04/17 Python
解决python升级引起的pip执行错误的问题
2018/06/12 Python
Python3实现获取图片文字里中文的方法分析
2018/12/13 Python
Python实现平行坐标图的两种方法小结
2019/07/04 Python
解决python中导入win32com.client出错的问题
2019/07/26 Python
中东地区最大的奢侈品市场:The Luxury Closet
2019/04/09 全球购物
开学典礼主持词
2014/03/19 职场文书
2015年禁毒宣传活动总结
2015/03/25 职场文书
python3 sqlite3限制条件查询的操作
2021/04/07 Python
使用Django框架创建项目
2022/06/10 Python