php密碼生成類實(shí)例
本文實(shí)例講述了php實(shí)現(xiàn)的密碼生成類及其應(yīng)用方法,分享給大家供大家參考。具體分析如下:
一、php密碼生成類功能:
1.可設(shè)定密碼長度。
2.可設(shè)定要生成的密碼個(gè)數(shù),批量生成。
3.可以指定密碼的規(guī)則,字母,數(shù)字,特殊字符等。
二、用法:
GeneratePassword.class.php類文件如下:
<?php
/** Generate Password class,根據(jù)指定規(guī)則生成password
* Date: 2013-12-23
* Author: fdipzone
* Ver: 1.0
*
* Func:
* public batchGenerate 批量生成密碼
* private generate 生成單個(gè)密碼
* private getLetter 獲取字母
* private getNumber 獲取數(shù)字
* private getSpecial 獲取特殊字符
*/
class GeneratePassword{ // class start
// 密碼的規(guī)則 default
private $_rule = array(
'letter' => 1,
'number' => 1,
'special' => 1
);
private $_length = 8; // 密碼長度
private $_num = 1; // 密碼數(shù)量
private $_special = '!@#$%^&*()_+=-'; //允許的特殊字符
/** 初始化
* @param int $length 密碼長度
* @param int $num 密碼數(shù)量
* @param Array $rule 密碼規(guī)則
* @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){ // 數(shù)量
$this->_num = $num;
}
if(isset($special) && is_string($special) && $special!=''){ // 特殊字符
$this->_special = $special;
}
if($rule){ // 規(guī)則
$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;
}
/** 生成單個(gè)密碼
* @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); // 隨機(jī)打亂
$password = str_shuffle($force_pool. substr($pool, 0, $this->_length-strlen($force_pool))); // 再次隨機(jī)打亂
return $password;
}
/** 字母 */
private function getLetter(){
$letter = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz';
return $letter;
}
/** 數(shù)字 */
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, // 必須含有數(shù)字
'special' => 2 // 必須含有特殊字符
);
$special = '!@#$%_-';
$obj = new GeneratePassword(8, 10, $rule, $special);
$passwords = $obj->batchGenerate();
echo implode('<br>', $passwords);
?>
本文完整源碼可點(diǎn)擊此處本站下載。
相信本文所述對大家的C#程序設(shè)計(jì)有一定的借鑒價(jià)值。
相關(guān)文章
PHP利用ThinkPHP6完整實(shí)現(xiàn)用戶分頁功能
分頁功能在Web開發(fā)中是一個(gè)非常常見的需求,特別是在處理大量數(shù)據(jù)時(shí),為了提高用戶體驗(yàn)和性能,將數(shù)據(jù)分頁展示是必不可少的,ThinkPHP6作為一款流行的PHP框架,自帶了強(qiáng)大的分頁功能,本文將詳細(xì)介紹如何使用ThinkPHP6實(shí)現(xiàn)分頁功能,需要的朋友可以參考下2023-12-12
php版阿里大于(阿里大魚)短信發(fā)送實(shí)例詳解
這篇文章主要介紹了php版阿里大于(阿里大魚)短信發(fā)送實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了阿里大于短信發(fā)送接口的配置與使用技巧,需要的朋友可以參考下2016-11-11
PHP實(shí)現(xiàn)批量清空刪除指定文件夾所有內(nèi)容的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)批量清空刪除指定文件夾所有內(nèi)容的方法,涉及php基于自定義函數(shù)遞歸調(diào)用實(shí)現(xiàn)刪除指定目錄下文件與文件夾相關(guān)操作技巧,需要的朋友可以參考下2017-05-05
詳解WordPress中添加和執(zhí)行動(dòng)作的函數(shù)使用方法
這篇文章主要介紹了WordPress中添加和執(zhí)行動(dòng)作的函數(shù)使用方法,分別講解了add_action()與do_action()的用法,需要的朋友可以參考下2015-12-12
PHP+FLASH實(shí)現(xiàn)上傳文件進(jìn)度條相關(guān)文件 下載
PHP+FLASH實(shí)現(xiàn)上傳文件進(jìn)度條相關(guān)文件 下載...2007-07-07
隱藏X-Space個(gè)人空間下方版權(quán)方法隱藏X-Space個(gè)人空間標(biāo)題隱藏X-Space個(gè)人空間管理版權(quán)方法
隱藏X-Space個(gè)人空間下方版權(quán)方法隱藏X-Space個(gè)人空間標(biāo)題隱藏X-Space個(gè)人空間管理版權(quán)方法...2007-02-02

