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
用PHP制作静态网站的模板框架(四)
Oct 09 PHP
PHP的单引号和双引号 字符串效率
May 27 PHP
PHP判断图片格式的七种方法小结
Jun 03 PHP
php生成数组的使用示例 php全组合算法
Jan 16 PHP
php检索或者复制远程文件的方法
Mar 13 PHP
php输出全球各个时区列表的方法
Mar 31 PHP
PHP中的类型提示(type hinting)功能介绍
Jul 01 PHP
php实现微信发红包
Dec 05 PHP
10个对初学者非常有用的PHP技巧
Apr 06 PHP
PHP安装BCMath扩展的方法
Feb 13 PHP
TP5框架实现上传多张图片的方法分析
Mar 29 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
一个从别的网站抓取信息的例子(域名查询)
2006/10/09 PHP
PHP ? EasyUI DataGrid 资料存的方式介绍
2012/11/07 PHP
JavaScript动态改变HTML页面元素例如添加或删除
2014/08/10 Javascript
JS实现点击登录弹出窗口同时背景色渐变动画效果
2016/03/25 Javascript
Bootstrap前端开发案例一
2016/06/17 Javascript
JS实现将Asp.Net的DateTime Json类型转换为标准时间的方法
2016/08/02 Javascript
BootStrap+Angularjs+NgDialog实现模式对话框
2016/08/24 Javascript
使用JavaScript触发过渡效果的方法
2017/01/19 Javascript
JavaScript中使用webuploader实现上传视频功能(demo)
2017/04/10 Javascript
使用jquery+iframe做一个ajax上传效果(实例)
2017/08/24 jQuery
Vue.js项目模板搭建图文教程
2017/09/20 Javascript
浅谈JS 数字和字符串之间相互转化的纠纷
2017/10/20 Javascript
Vue-路由导航菜单栏的高亮设置方法
2018/03/17 Javascript
ndm:NPM的桌面GUI应用程序
2018/10/15 Javascript
详解vue开发中调用微信jssdk的问题
2019/04/16 Javascript
在JavaScript中如何访问暂未存在的嵌套对象
2019/06/18 Javascript
VUE : vue-cli中去掉路由中的井号#操作
2020/09/04 Javascript
Python时区设置方法与pytz查询时区教程
2013/11/27 Python
Python中的fileinput模块的简单实用示例
2015/07/09 Python
Python中的if、else、elif语句用法简明讲解
2016/03/11 Python
Python变量和数据类型详解
2017/02/15 Python
利用Python中的pandas库对cdn日志进行分析详解
2017/03/07 Python
1分钟快速生成用于网页内容提取的xslt
2018/02/23 Python
Python 中的Selenium异常处理实例代码
2018/05/03 Python
Python文件循环写入行时防止覆盖的解决方法
2018/11/09 Python
python写入文件自动换行问题的方法
2019/07/05 Python
Python使用scrapy爬取阳光热线问政平台过程解析
2019/08/14 Python
python 用opencv实现霍夫线变换
2020/11/27 Python
python抢购软件/插件/脚本附完整源码
2021/03/04 Python
俄罗斯第一家篮球店:StreetBall
2020/07/30 全球购物
会计电算化个人求职信范文
2014/01/24 职场文书
房屋委托书范本
2014/04/04 职场文书
校外活动方案
2014/08/28 职场文书
人工作失职检讨书
2015/05/05 职场文书
地道战观后感2000字
2015/06/04 职场文书
Redis5之后版本的高可用集群搭建的实现
2021/04/27 Redis