本文实例讲述了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程序设计有所帮助。