本文实例讲述了PHP实现简单实用的验证码类。分享给大家供大家参考。具体如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
<?php /** * @version 1.0 * @author bolted snail * @date 2011-10-15 * @PHP验证码类 * 使用方法: * $image=new Captcha(); * $image->config('宽度','高度','字符个数','验证码session索引'); * $image->create();//这样就会向浏览器输出一张图片 * //所有参数都可以省略, * 默认是:宽80 高20 字符数4 验证码session索引captcha_code * 第四个参数即把验证码存到$_SESSION['captcha_code'] * 最简单使用示例: * $image=new Captcha(); * $image->create();//这样就会向浏览器输出一张图片 */ class Captcha { private $width =80, $height =20, $codenum =4; public $checkcode ; //产生的验证码 private $checkimage ; //验证码图片 private $disturbColor = '' ; //干扰像素 private $session_flag = 'captcha_code' ; //存到session中的索引 //尝试开始session function __construct(){ @session_start(); } /* * 参数:(宽度,高度,字符个数) */ function config( $width = '80' , $height = '20' , $codenum = '4' , $session_flag = 'captcha_code' ) { $this ->width= $width ; $this ->height= $height ; $this ->codenum= $codenum ; $this ->session_flag= $session_flag ; } function create() { //输出头 $this ->outFileHeader(); //产生验证码 $this ->createCode(); //产生图片 $this ->createImage(); //设置干扰像素 $this ->setDisturbColor(); //往图片上写验证码 $this ->writeCheckCodeToImage(); imagepng( $this ->checkimage); imagedestroy( $this ->checkimage); $_SESSION [ $this ->session_flag]= $this ->checkcode; } /* * @brief 输出头 */ private function outFileHeader() { header ( "Content-type: image/png" ); } /** * 产生验证码 */ private function createCode() { $this ->checkcode = strtoupper ( substr (md5(rand()),0, $this ->codenum)); } /** * 产生验证码图片 */ private function createImage() { $this ->checkimage = @imagecreate( $this ->width, $this ->height); $back = imagecolorallocate( $this ->checkimage,255,255,255); $border = imagecolorallocate( $this ->checkimage,0,0,0); imagefilledrectangle( $this ->checkimage,0,0, $this ->width - 1, $this ->height - 1, $back ); // 白色底 imagerectangle( $this ->checkimage,0,0, $this ->width - 1, $this ->height - 1, $border ); // 黑色边框 } /** * 设置图片的干扰像素 */ private function setDisturbColor() { for ( $i =0; $i <=200; $i ++) { $this ->disturbColor = imagecolorallocate( $this ->checkimage, rand(0,255), rand(0,255), rand(0,255)); imagesetpixel( $this ->checkimage,rand(2,128),rand(2,38), $this ->disturbColor); } } /** * * 在验证码图片上逐个画上验证码 * */ private function writeCheckCodeToImage() { for ( $i =0; $i < $this ->codenum; $i ++) { $bg_color = imagecolorallocate ( $this ->checkimage, rand(0,255), rand(0,128), rand(0,255)); $x = floor ( $this ->width/ $this ->codenum)* $i ; $y = rand(0, $this ->height-15); imagechar ( $this ->checkimage, rand(5,8), $x +5, $y , $this ->checkcode[ $i ], $bg_color ); } } function __destruct() { unset( $this ->width, $this ->height, $this ->codenum, $this ->session_flag); } } ?> |
希望本文所述对大家的php程序设计有所帮助。