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