时间:2021-07-01 10:21:17 帮助过:10人阅读
本文实例讲述了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('
', $passwords);
?>
本文完整源码可点击此处本站下载。
相信本文所述对大家的C#程序设计有一定的借鉴价值。
可以把大写字母和数字放在一个数组里,再随机取。
用你原来想法的话,可以这样加判断
for ($i = 0; $i < $pw_length; $i++)
{
$a =char(mt_rand(33, 126));
if(($a < '0') || ($a > 'Z') || ($a > '9')&&($a <'A'))
{
$i--
}
else
{
$randpwd .=$a;
}
}
给你一些代码吧,具体怎么改,你自己根据自己的需要改一下.
function MakeCard()
{
set_time_limit(0);
//处理缓冲区
ob_end_clean();
ob_implicit_flush(true);
echo str_pad(" ", 256);
if(intval($_POST['num']>0)) $num=intval($_POST['num']); //数量
if(intval($_POST['point']>0)) $point=intval($_POST['point']); //点数
if(intval($_POST['batch']>0)) $batch=intval($_POST['batch']); //批号
if(($_POST['ym']!="")) $ym=$_POST['ym']; //发行年月
else $ym=date('ym');
if($num==0) return;
$num=$num*10000; //卡的张数,即记录数
echo "
开始 ".date("H:i:s")." ";
for($i=1;$i<=$num;$i++)
{
$sn=sprintf("%02s%s%06s",$batch,$ym,$i);
$seek=mt_rand(0,9999).mt_rand(0,9999).mt_rand(0,9999); //12位
$start=mt_rand(0,20);
$str=strtoupper(substr(md5($seek),$start,12));
$str=str_replace("O",chr(mt_rand(65,78)),$str);
$str=str_replace("0",chr(mt_rand(65,78)),$str);
$row=array('sn'=>$sn,'password'=>$str,'created'=>time(),'point'=>$point);
//查重
//在这里加插入数据的代码.
echo " 结束 ".date("H:i:s")."";
printf("
成功生成:%s万个 %s点 的密码</p>",$num/1e4,$point);
return $num;
} //函数结束
$numbers=MakeCark(......余下全文>>
http://www.bkjia.com/PHPjc/883683.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/883683.htmlTechArticlephp密码生成类实例,php生成实例 本文实例讲述了php实现的密码生成类及其应用方法,分享给大家供大家参考。具体分析如下: 一、php密码...