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 CURL模拟GET及POST函数代码
Apr 25 PHP
php批量更改数据库表前缀实现方法
Oct 26 PHP
php自定义函数截取汉字长度
May 15 PHP
php实现插入排序
Mar 29 PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
Jul 08 PHP
基于OpenCart 开发支付宝,财付通,微信支付参数错误问题
Oct 01 PHP
PHP json_encode() 函数详解及中文乱码问题
Nov 05 PHP
使用php+swoole对client数据实时更新(一)
Jan 07 PHP
php数据访问之增删改查操作
May 09 PHP
PHP下的浮点运算不准的解决方法
Oct 27 PHP
Yii2下点击验证码的切换实例代码
Mar 14 PHP
PHP对称加密算法(DES/AES)类的实现代码
Nov 14 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 变量定义和变量替换的方法
2009/07/30 PHP
一个典型的PHP分页实例代码分享
2011/07/28 PHP
ThinkPHP连接数据库及主从数据库的设置教程
2014/08/22 PHP
PHP操作路由器实现方法示例
2019/04/27 PHP
基于PHP实现解密或加密Cloudflar邮箱保护
2020/06/24 PHP
让你的博客飘雪花超出屏幕依然看得见
2013/01/04 Javascript
jquery 操作两个select实现值之间的互相传递
2014/03/07 Javascript
深入探讨JavaScript、JQuery屏蔽网页鼠标右键菜单及禁止选择复制
2014/06/10 Javascript
jQuery实现首页图片淡入淡出效果的方法
2015/06/10 Javascript
详解javascript传统方法实现异步校验
2016/01/22 Javascript
Vue2.X 通过AJAX动态更新数据
2018/07/17 Javascript
Javascript实现动态时钟效果
2018/11/17 Javascript
elementUI select组件value值注意事项详解
2019/05/29 Javascript
VUEX 数据持久化,刷新后重新获取的例子
2019/11/12 Javascript
node.js开发辅助工具nodemon安装与配置详解
2020/02/06 Javascript
使用webpack和rollup打包组件库的方法
2021/02/25 Javascript
Python 类的继承实例详解
2017/03/25 Python
儿童python练习实例
2018/05/27 Python
Python实现的简单计算器功能详解
2018/08/25 Python
Python实现字典排序、按照list中字典的某个key排序的方法示例
2018/12/18 Python
Python中 Global和Nonlocal的用法详解
2020/01/20 Python
Python3中的f-Strings增强版字符串格式化方法
2020/03/04 Python
中国最大隐形眼镜网上商城:视客眼镜网
2016/10/30 全球购物
Calzedonia美国官网:意大利风格袜子、打底裤和沙滩装
2018/07/19 全球购物
Bluebella德国官网:英国性感内衣和睡衣品牌
2019/11/08 全球购物
酷瑞网络科技面试题
2012/03/30 面试题
工程师求职简历的自我评价分享
2013/10/10 职场文书
旅游项目开发策划书
2014/01/18 职场文书
捐款倡议书
2014/04/14 职场文书
中学生关于梦想的演讲稿
2014/08/22 职场文书
信息与工商管理职业规划范文:为梦想而搏击
2014/09/11 职场文书
活动总结模板大全
2015/05/11 职场文书
聘用合同范本
2015/09/21 职场文书
Django实现聊天机器人
2021/05/31 Python
Java数组与堆栈相关知识总结
2021/06/29 Java/Android
国际最新研究在陨石中发现DNA主要成分 或由陨石带来地球
2022/04/29 数码科技