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.html
12 * @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>
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++){