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 相关文章推荐
文件上传的实现
Oct 09 PHP
简单的页面缓冲技术
Oct 09 PHP
PHP开发中常用的8个小技巧
Aug 27 PHP
php目录管理函数小结
Sep 10 PHP
php class中self,parent,this的区别以及实例介绍
Apr 24 PHP
探讨PHP中OO之静态关键字以及类常量的详解
Jun 07 PHP
浅析php中三个等号(===)和两个等号(==)的区别
Aug 06 PHP
PHP实现获取域名的方法小结
Nov 05 PHP
php随机抽奖实例分析
Mar 04 PHP
php检测url是否存在的方法
Apr 14 PHP
joomla数据库操作示例代码
Jan 06 PHP
Symfony2 session用法实例分析
Feb 04 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 抓取新浪读书频道的小说并生成txt电子书的代码
2009/12/18 PHP
php 数组的一个悲剧?
2011/05/11 PHP
file_get_contents获取不到网页内容的解决方法
2013/03/07 PHP
PHP的中使用非缓冲模式查询数据库的方法
2017/02/05 PHP
JavaScript Event事件学习第一章 Event介绍
2010/02/07 Javascript
读取input:file的路径并显示本地图片的方法
2013/09/23 Javascript
jquery插件jSignature实现手动签名
2015/05/04 Javascript
jquery简单实现外部链接用新窗口打开的方法
2015/05/30 Javascript
js鼠标点击图片切换效果代码分享
2015/08/26 Javascript
window.open打开窗口被拦截的快速解决方法
2016/08/04 Javascript
jQuery日期范围选择器附源码下载
2017/05/23 jQuery
解决Jstree 选中父节点时被禁用的子节点也会选中的问题
2017/12/27 Javascript
解决vue attr取不到属性值的问题
2018/09/18 Javascript
vue实现的微信机器人聊天功能案例【附源码下载】
2019/02/18 Javascript
详解Vue中使用Axios拦截器
2019/04/22 Javascript
Vue 无限滚动加载指令实现方法
2019/05/28 Javascript
jQuery模仿ToDoList实现简单的待办事项列表
2019/12/30 jQuery
基于python时间处理方法(详解)
2017/08/14 Python
django模型层(model)进行建表、查询与删除的基础教程
2017/11/21 Python
Python从文件中读取指定的行以及在文件指定位置写入
2019/09/06 Python
使用python代码进行身份证号校验的实现示例
2019/11/21 Python
Python drop方法删除列之inplace参数实例
2020/06/27 Python
python函数超时自动退出的实操方法
2020/12/28 Python
css3中的calc函数浅析
2018/07/10 HTML / CSS
绘画设计学生的个人自我评价
2013/09/20 职场文书
护理专业自荐信
2013/12/03 职场文书
普罗米修斯教学反思
2014/02/06 职场文书
生日宴会主持词
2014/03/20 职场文书
社区党员公开承诺书
2014/08/30 职场文书
公安机关纪律作风整顿剖析
2014/10/10 职场文书
2014年教务处工作总结
2014/12/03 职场文书
CSS3鼠标悬浮过渡缩放效果
2021/04/17 HTML / CSS
Python 文本滚动播放器的实现代码
2021/04/25 Python
如何在向量化NumPy数组上进行移动窗口
2021/05/18 Python
CentOS7环境下MySQL8常用命令小结
2022/06/10 Servers
Spring boot admin 服务监控利器详解
2022/08/05 Java/Android