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程序设计有所帮助。