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 数组遍历方法大全(foreach,list,each)
Jun 30 PHP
通过JavaScript或PHP检测Android设备的代码
Mar 09 PHP
php中CI操作多个数据库的代码
Jul 05 PHP
php笔记之:php函数range() round()和list()的使用说明
Apr 26 PHP
php设计模式之观察者模式的应用详解
May 21 PHP
一致性哈希算法以及其PHP实现详细解析
Aug 24 PHP
php实现执行某一操作时弹出确认、取消对话框
Dec 30 PHP
采用thinkphp自带方法生成静态html文件详解
Jun 13 PHP
PHP中判断文件存在使用is_file还是file_exists?
Apr 03 PHP
php经典算法集锦
Nov 14 PHP
php array_udiff_assoc 计算两个数组的差集实例
Nov 12 PHP
实例讲解通过​PHP创建数据库
Jan 20 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基础之运算符的使用方法
2013/04/28 PHP
一个经典的PHP文件上传类分享
2014/11/18 PHP
PHP实现简单实用的分页类代码
2016/04/08 PHP
php基于数组函数实现关联表的编辑操作示例
2017/07/04 PHP
PHP自动生成缩略图函数的源码示例
2019/03/18 PHP
javascript XMLHttpRequest对象全面剖析
2010/04/24 Javascript
JS 操作符整理[推荐收藏]
2011/11/15 Javascript
javascript提取URL的搜索字符串中的参数(自定义函数实现)
2013/01/22 Javascript
自己实现ajax封装示例分享
2014/04/01 Javascript
JavaScript 作用域链解析
2014/11/13 Javascript
Jquery元素追加和删除的实现方法
2016/05/24 Javascript
基于vue2.0实现的级联选择器
2017/06/09 Javascript
在React中如何优雅的处理事件响应详解
2017/07/24 Javascript
JS实现将链接生成二维码并转为图片的方法
2018/03/17 Javascript
jquery拖拽自动排序插件使用方法详解
2020/07/20 jQuery
小程序server请求微信服务器超时的解决方法
2019/05/21 Javascript
[03:46]显微镜下的DOTA2第七期——满血与残血
2014/06/20 DOTA
[03:42]2014DOTA2国际邀请赛 第三日比赛排位扑朔迷离
2014/07/12 DOTA
python开发的小球完全弹性碰撞游戏代码
2013/10/15 Python
Django unittest 设置跳过某些case的方法
2018/12/26 Python
python GUI实现小球满屏乱跑效果
2019/05/09 Python
django中上传图片分页三级联动效果的实现代码
2019/08/30 Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
2019/12/25 Python
python 浮点数四舍五入需要注意的地方
2020/08/18 Python
详解background属性的8个属性值(面试题)
2020/11/02 HTML / CSS
超30万乐谱下载:Musicnotes.com
2016/09/24 全球购物
Myprotein荷兰官网:欧洲第一运动营养品牌
2020/07/11 全球购物
南京某软件公司的.net面试题
2015/11/30 面试题
十佳大学生事迹材料
2014/01/29 职场文书
中国入世承诺
2014/04/01 职场文书
2014年幼儿园安全工作总结
2014/11/10 职场文书
2015年妇联工作总结范文
2015/04/22 职场文书
从严治党主题教育活动总结
2015/05/07 职场文书
mysql知识点整理
2021/04/05 MySQL
Python使用Kubernetes API访问集群
2021/05/30 Python
JavaScript实现音乐播放器
2022/08/14 Javascript