万能php验证码类,供大家参考,具体内容如下
code.php是验证码类,类的名称最好和文件名的名称一样,这样有利于我们的查看。
code.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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
<?php header( 'Content-type:text/html;charset=utf8' ); class Code{ // 验证码个数$number protected $number ; // 验证码类型$codeType protected $codeType ; // 验证码图像宽度$width protected $width ; // 验证码$height protected $height ; // 验证码字符串$code protected $code ; // 图像资源$image protected $image ; public function __construct( $number =4, $codeType =0, $height =50, $width =100){ //初始化自己的成员属性 $this ->number= $number ; $this ->codeType= $codeType ; $this ->width = $width ; $this ->height= $height ; //生成验证码函数 $this ->code = $this ->createCode(); } public function __get( $name ){ if ( $name == 'code' ){ return $this ->code; } return false; } /*获取验证码*/ public function getCode() { return $this ->code; } /*图像资源销毁*/ public function __destruct(){ imagedestroy( $this ->image); } protected function createCode(){ //通过你的验证码类型生成验证码 switch ( $this ->codeType){ case 0: //纯数字 $code = $this ->getNumberCode(); break ; case 1: //纯字母的 $code = $this ->getCharCode(); break ; case 2: //数字和字母混合 $code = $this ->getNumCharCode(); break ; default : die ( '不支持此类验证码类型' ); } return $code ; } protected function getNumberCode(){ $str = join( '' , range(0, 9)); return substr ( str_shuffle ( $str ),0, $this ->number); } protected function getCharCode(){ $str = join( '' , range( 'a' , 'z' )); $str = $str . strtoupper ( $str ); return substr ( str_shuffle ( $str ),0, $this ->number); } protected function getNumCharCode(){ $numstr = join( '' ,range(0, 9)); $str =join( '' , range( 'a' , 'z' )); $str = $numstr . $str . strtoupper ( $str ); return substr ( str_shuffle ( $str ), 0, $this ->number); } protected function createImage(){ $this ->image = imagecreatetruecolor( $this ->width, $this ->height); } protected function fillBack(){ imagefill( $this ->image, 0, 0, $this ->lightColor()); } /*浅色*/ protected function lightColor(){ return imagecolorallocate( $this ->image, mt_rand(133,255), mt_rand(133,255), mt_rand(133,255)); } /*深色*/ protected function darkColor(){ return imagecolorallocate( $this ->image, mt_rand(0,120), mt_rand(0,120), mt_rand(0,120)); } protected function drawChar(){ $width = ceil ( $this ->width / $this ->number); for ( $i =0; $i < $this ->number; $i ++){ $x = mt_rand( $i * $width +5, ( $i +1)* $width -10); $y = mt_rand(0, $this ->height -15); imagechar( $this ->image, 5, $x , $y , $this ->code[ $i ], $this ->darkColor()); } } protected function drawLine(){ for ( $i =0; $i <5; $i ++) { imageline( $this ->image,mt_rand(0, $this ->width),mt_rand(0, $this ->height),mt_rand(0, $this ->width),mt_rand(0, $this ->height), $this ->darkColor()); } } protected function drawDisturb(){ for ( $i =0; $i <150; $i ++){ $x =mt_rand(0, $this ->width); $y =mt_rand(0, $this ->height); imagesetpixel( $this ->image, $x , $y , $this ->lightColor()); } } protected function show(){ header( 'Content-Type:image/png' ); imagepng( $this ->image); } public function outImage(){ // 创建画布 $this ->createImage(); // 填充背景色 $this ->fillBack(); // 将验证码字符串花到画布上 $this ->drawChar(); // 添加干扰元素 $this ->drawDisturb(); // 添加线条 $this ->drawLine(); // 输出并显示 $this ->show(); } } |
test.php是new一个新的验证码,并把它保存到session中,为我们验证码的验证起到保存和存储的作用。
test.php
1
2
3
4
5
6
7
8
|
<?php //开启session session_start(); require_once 'code.php' ; $code = new Code(4,1,50,100); $_SESSION [ 'code' ]= $code ->getCode(); $code ->outImage(); |
login.php就是最后的验证。
login.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
|
<? php //开启Session session_start(); //判断是否提交 if(isset($_POST['dosubmit'])){ //获取session中的验证码并转为小写 $ sessionCode = strtolower ($_SESSION['code']); //获取输入的验证码 $ code = strtolower ($_POST['code']); //判断是否相等 if($sessionCode==$code){ echo "<script type = 'text/javascript' >alert('验证码正确!');</ script >"; }else{ echo "< script type = 'text/javascript' >alert('验证码错误!');</ script >"; } } ?> <!DOCTYPE html> < html > < head > < title ></ title > < meta http-equiv = "Content-Type" content = "text/html;charset=UTF-8" /> < style type = "text/css" > *{margin:0px;padding:0px;} ul{ width:400px; list-style:none; margin:50px auto; } li{ padding:12px; position:relative; } label{ width:80px; display:inline-block; float:left; line-height:30px; } input[type='text'],input[type='password']{ height:30px; } img{ margin-left:10px; } input[type="submit"]{ margin-left:80px; padding:5px 10px; } </ style > </ head > < body > < form action = "login.php" method = "post" > < ul > < li > < label >用户名:</ label > < input type = "text" name = "username" /> </ li > < li > < label >密码:</ label > < input type = "password" name = "password" /> </ li > < li > < label >验证码:</ label > < input type = "text" name = "code" size = "4" style = "float:left" /> < img src = "test.php" onclick = "this.src='test.php?Math.random()'" /> </ li > < li > < input type = "submit" value = "登录" name = "dosubmit" /> </ li > </ ul > </ form > </ body > </ html > |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。