php密码生成类实例

 更新时间:2014年09月24日 11:47:27   投稿:shichen2014  
这篇文章主要介绍了php密码生成类,可实现根据要求生成多种格式密码的功能,是一款非常实用的PHP类文件,需要的朋友可以参考下

本文实例讲述了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-amq扩展简明教程

    php编译安装php-amq扩展简明教程

    这篇文章主要介绍了php编译安装php-amq扩展的方法,较为详细的分析了php-amq扩展的功能及下载、编译安装的具体步骤与相关注意事项,需要的朋友可以参考下
    2016-06-06
  • 上传文件先创建目录 再上传到目录里面去

    上传文件先创建目录 再上传到目录里面去

    上传文件先创建目录,其实应该先加入判断文件夹是否存在,不存在则创建文件夹的,希望朋友们自行添加,这里给出的是核心代码。
    2010-12-12
  • php url地址栏传中文乱码解决方法集合

    php url地址栏传中文乱码解决方法集合

    php地址栏传中文$_GET下来后乱码,urlencode和urldecode,iconv,base64_encode等方法,整理基本是常用的了。
    2010-06-06
  • 用phpmyadmin更改mysql5.0登录密码

    用phpmyadmin更改mysql5.0登录密码

    mysql5.0更改登录密码完成架站完成大斌的BLOG也一并处理今天忙了整整一天,做了一些无聊并且重复的体力劳动,几乎没有学到什么东西,却浪费了一天时间。可惜,可悲,可叹。不过总算把算服务器的MYSQL登录密码和PHPMYADMIN的远程访问方式改好了。MYSQL自4.1起就更改了加密方式,讲原先16位的加密改成40位,把我害苦了,怎么都连接不上。查遍资料今天总算搞定了通过PHPMYADMIN更改MYSQL密码,个人觉得简单实用
    2008-03-03
  • windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)

    windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)

    配置php_intl模块总是加载失败,在这找到了解决方法
    2014-01-01
  • 关于PHP5 Session生命周期介绍

    关于PHP5 Session生命周期介绍

    PHP5有很多值得学习的地方,这里我们主要介绍PHP5 Session的使用,Session 是如何来判断客户端用户的呢?
    2010-03-03
  • 解决Laravel blade模板转义html标签的问题

    解决Laravel blade模板转义html标签的问题

    今天小编就为大家分享一篇解决Laravel blade模板转义html标签的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • PHP实现的用户注册表单验证功能简单示例

    PHP实现的用户注册表单验证功能简单示例

    这篇文章主要介绍了PHP实现的用户注册表单验证功能,结合简单实例形式分析了php form表单提交、数据库查询、正则验证等相关操作技巧,需要的朋友可以参考下
    2019-02-02
  • php冒泡排序与快速排序实例详解

    php冒泡排序与快速排序实例详解

    这篇文章主要介绍了php冒泡排序与快速排序实现方法,结合实例形式较为详细的分析了phpphp排序算法的递归、遍历运算及流程控制的相关技巧,需要的朋友可以参考下
    2015-12-12
  • 使用php+apc实现上传进度条且在IE7下不显示的问题解决方法

    使用php+apc实现上传进度条且在IE7下不显示的问题解决方法

    本篇文章介绍了,使用php+apc实现上传进度条且在IE7下不显示的问题解决方法。需要的朋友参考下
    2013-04-04

最新评论