首页 > 代码库 > PHP生成图片验证码demo【OOP面向对象版本】

PHP生成图片验证码demo【OOP面向对象版本】

下面是我今天下午用PHP写的一个生成图片验证码demo,仅供参考。

这个demo总共分为4个文件,具体代码如下:

1、code.html中的代码:

 1 <!doctype html> 2 <html lang="en"> 3     <head> 4         <meta charset="utf-8" /> 5         <title>登录、注册验证码生成</title> 6     </head> 7     <body> 8          <!-- 9              * @Description  网站登录/注册验证码生成类10              * @Author  赵一鸣11              * @OnlineDemo http://www.zymseo.com/demo/verificationcode/code.html12              * @Date  2016年10月6日 13          -->14         <form action="checkcode.php" method="post">15             <input type="text" name="code" /><br/>16             <img src="showcode.php" onclick="this.setAttribute(‘src‘,‘showcode.php?‘+Math.random())" />17             <span>看不清?点击图片即可切换验证码</span><br/>18             <input type="submit" name="sub" value="登录/注册" />19         </form>20     </body>21 </html>

2、createcode.class.php中的代码:

 1 <?php 2     /** 3      * @Description  网站登录/注册验证码生成类 4      * @Author  赵一鸣 5      * @OnlineDemo http://www.zymseo.com/demo/verificationcode/code.html 6      * @Date  2016年10月6日  7      */ 8     class Createcode{ 9         //画布资源10         public $img;11         //画布宽度12         private $img_width;13         //画布高度14         private $img_height;15         //画布颜色16         private $img_bgcolor;17         //验证码文字内容18         private $str_content;19         //生成的验证码内容20         private $code_content;21         //验证码颜色22         private $code_content_color;23         //构造函数24         public function __construct($img_width,$img_height,$str_content,$code_content_color){25             if($this->gdcheck()){26                 $this->img_width = $img_width;27                 $this->img_height = $img_height;28                 $this->str_content = $str_content;29                 $this->code_content_color = $code_content_color;30                 $this->get_code();31                 $this->session_code();32             }33         }34         //生成画布35         public function get_img(){36             //定义画布37             $this->img = imagecreatetruecolor($this->img_width, $this->img_height);38             //画布背景色39             $this->img_bgcolor = imagecolorallocate($this->img, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));40             //给画图填充背景色41             imagefill($this->img, 0, 0, $this->img_bgcolor);42             //取得画布的宽高43             $img_width = imagesx($this->img);44             $img_height = imagesy($this->img);45             //画布中插入验证码46             imagestring($this->img, 5, ($this->img_width/3), ($this->img_height/2.5), $this->code_content, imagecolorallocate($this->img, hexdec(substr($this->code_content_color, 1,2)), hexdec(substr($this->code_content_color, 3,2)), hexdec(substr($this->code_content_color, 5,2))));47             //画布中插入像素点48             $this->get_pix();49             //画布中插入直线50             $this->get_line();51             //画布显示52             header(‘Content-type:image/png‘);53             imagepng($this->img);54         }55         //生成验证码56         private function get_code(){57             $str_content_len = strlen($this->str_content);58             for($i=0;$i<4;$i++){59                 $this->code_content .= substr($this->str_content, mt_rand(0,$str_content_len-1),1);60             }61         }62         //生成像素点63         private function get_pix(){64             for($j=0;$j<300;$j++){65                 $image_pix .= imagesetpixel($this->img, mt_rand(0,$this->img_width), mt_rand(0,$this->img_height), imagecolorallocate($this->img, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255)));66             }67             return $image_pix;68         }69         //生成直线70         private function get_line(){71             for($l=0;$l<2;$l++){72                 $img_line .= imageline($this->img, mt_rand(0,$this->img_width), mt_rand(0,$this->img_height), mt_rand(0,$this->img_width), mt_rand(0,$this->img_height), imagecolorallocate($this->img, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255)));73             }74             return $img_line;75         }76         //session存储验证码77         private function session_code(){78             session_start();79             $_SESSION[‘code‘] = $this->code_content;80         }81         //判断程序是否支持GD库82         private function gdcheck(){83             if(extension_loaded(‘gd‘)){84                 return true;85             }else{86                 return false;87                 exit();88             }89         }90     }

3、checkcode.php中的代码:

<?php/** * @Description  网站登录/注册验证码生成类 * @Author  赵一鸣 * @OnlineDemo http://www.zymseo.com/demo/verificationcode/code.html * @Date  2016年10月6日 */    header(‘Content-type:text/html;charset="utf-8"‘);    session_start();    if($_POST[‘code‘]!=‘‘){        if($_SESSION[‘code‘]==$_POST[‘code‘]){            echo<script type="text/javascript">                    alert("验证码填写成功");                    history.go(-1);                </script>;        }else{            echo<script type="text/javascript">                    alert("验证码填写失败");                    history.go(-1);                </script>;        }    }

4、showcode.php中的代码:

 1 <?php 2 /** 3  * @Description  网站登录/注册验证码生成类 4  * @Author  赵一鸣 5  * @OnlineDemo http://www.zymseo.com/demo/verificationcode/code.html 6  * @Date  2016年10月6日 7  */ 8     function __autoload($classname){ 9         include strtolower($classname).‘.class.php‘;10     }11     //定义验证码的取值范围12     $str_content = ‘abcdefghijklmnopqrstuvwxyz0123456789‘;13     //验证码文字颜色14     $code_content_color = ‘#ffffff‘;15     //初始化对象16     $code = new Createcode(100,30,$str_content,$code_content_color);17     $code->get_img();

转载请注明出处!

PHP生成图片验证码demo【OOP面向对象版本】