本文实例讲述了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
|
<?php
//验证码工具类
class Captcha{
//属性
private $width ;
private $height ;
private $fontsize ;
private $pixes ;
private $lines ;
private $str_len ;
/*
* 构造方法
* @param1 array $arr = array(),初始化属性的关联数组
*/
public function __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' ];
}
/*
* 产生验证码图片
*/
public function generate(){
//制作画布
$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 {
//失败
return false;
}
}
/*
* 获取验证码随机字符串
* @return string $captcha,随机验证码文字
*/
private function getCaptcha(){
//获取随机字符串
$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 ;
}
/*
* 增加干扰点
* @param1 resource $img
*/
private function getPixels( $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 );
}
}
/*
* 增加干扰线
* @param1 resource $img,要增加干扰线的图片资源
*/
private function getLines( $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 );
}
}
/*
* 验证验证码
* @param1 string $captcha,用户提交的验证码
* @return bool,成功返回true,失败返回false
*/
public static function checkCaptcha( $captcha ){
//验证码不区分大小写
return ( strtolower ( $captcha ) === strtolower ( $_SESSION [ 'captcha' ]));
}
}
|
希望本文所述对大家PHP程序设计有所帮助。