php封装的验证码工具类完整实例
本文实例讲述了php封装的验证码工具类。分享给大家供大家参考,具体如下:
<?php
//验证码工具类
classCaptcha{
//属性
private$width;
private$height;
private$fontsize;
private$pixes;
private$lines;
private$str_len;
/*
*构造方法
*@param1array$arr=array(),初始化属性的关联数组
*/
publicfunction__construct($arr=array()){
//初始化
$this->width=isset($arr['width'])?$arr['width']:$GLOBALS['config']['captcha']['width'];
$this->height=isset($arr['height'])?$arr['height']:$GLOBALS['config']['captcha']['height'];
$this->fontsize=isset($arr['fontsize'])?$arr['fontsize']:$GLOBALS['config']['captcha']['fontsize'];
$this->pixes=isset($arr['pixes'])?$arr['pixes']:$GLOBALS['config']['captcha']['pixes'];
$this->lines=isset($arr['lines'])?$arr['lines']:$GLOBALS['config']['captcha']['lines'];
$this->str_len=isset($arr['str_len'])?$arr['str_len']:$GLOBALS['config']['captcha']['str_len'];
}
/*
*产生验证码图片
*/
publicfunctiongenerate(){
//制作画布
$img=imagecreatetruecolor($this->width,$this->height);
//给定背景色
$bg_color=imagecolorallocate($img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
imagefill($img,0,0,$bg_color);
//制作干扰线
$this->getLines($img);
//增加干扰点
$this->getPixels($img);
//增加验证码文字
$captcha=$this->getCaptcha();
//文字颜色
$str_color=imagecolorallocate($img,mt_rand(0,100),mt_rand(0,100),mt_rand(0,100));
//写入文字
//计算文字应该出现的起始位置
$start_x=ceil($this->width/2)-25;
$start_y=ceil($this->height/2)-8;
if(imagestring($img,$this->fontsize,$start_x,$start_y,$captcha,$str_color)){
//成功:输出验证码
header('Content-type:image/png');
imagepng($img);
}else{
//失败
returnfalse;
}
}
/*
*获取验证码随机字符串
*@returnstring$captcha,随机验证码文字
*/
privatefunctiongetCaptcha(){
//获取随机字符串
$str=implode('',array_merge(range('a','z'),range('A','Z'),range(1,9)));
//随机取
$captcha='';//保存随机字符串
for($i=0,$len=strlen($str);$i<$this->str_len;$i++){
//每次随机取一个字符
$captcha.=$str[mt_rand(0,$len-1)].'';
}
//将数据保存到session
$_SESSION['captcha']=str_replace('','',$captcha);
//返回值
return$captcha;
}
/*
*增加干扰点
*@param1resource$img
*/
privatefunctiongetPixels($img){
//增加干扰点
for($i=0;$i<$this->pixes;$i++){
//分配颜色
$pixel_color=imagecolorallocate($img,mt_rand(100,150),mt_rand(100,150),mt_rand(100,150));
//画点
imagesetpixel($img,mt_rand(0,$this->width),mt_rand(0,$this->height),$pixel_color);
}
}
/*
*增加干扰线
*@param1resource$img,要增加干扰线的图片资源
*/
privatefunctiongetLines($img){
//增加干扰线
for($i=0;$i<$this->lines;$i++){
//分配颜色
$line_color=imagecolorallocate($img,mt_rand(150,200),mt_rand(150,200),mt_rand(150,200));
//画线
imageline($img,mt_rand(0,$this->width),mt_rand(0,$this->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$line_color);
}
}
/*
*验证验证码
*@param1string$captcha,用户提交的验证码
*@returnbool,成功返回true,失败返回false
*/
publicstaticfunctioncheckCaptcha($captcha){
//验证码不区分大小写
return(strtolower($captcha)===strtolower($_SESSION['captcha']));
}
}
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP图形与图片操作技巧汇总》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php面向对象程序设计入门教程》、《PHP网络编程技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。