本文为大家分享了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
|
<!DOCTYPE html> < html > < head > < meta http-equiv = "content-type" content = "text/html;charset=utf-8" > < title >This is a test!</ title > < link rel = "stylesheet" type = "text/css" href = "css/bootstrap.min.css" > </ head > < body > < form name = "form" > < input type = "text" placeholder = "账号" />< br /> < input type = "password" placeholder = "密码" />< br /> < input type = "text" placeholder = "验证码" /> < img id = "verImg" src = "libs/verification.php" /> < a href = "#" class = "change" onclick = "changeVer()" >点击刷新</ a >< br /> < input type = "submit" value = "登录" /> </ form > < script type = "text/javascript" > //刷新验证码 function changeVer(){ document.getElementById("verImg").src="libs/verification.php?tmp="+Math.random(); } </ script > </ body > </ html > |
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
|
<?php session_start(); //开启session记录验证码数据 vCode(4, 15); //设置验证码的字符个数和图片基础宽度 //vCode 字符数目,字体大小,图片宽度、高度 function vCode( $num = 4, $size = 20, $width = 0, $height = 0) { ! $width && $width = $num * $size * 4 / 5 + 15; ! $height && $height = $size + 10; //设置验证码字符集合 $str = "23456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVW" ; //保存获取的验证码 $code = '' ; //随机选取字符 for ( $i = 0; $i < $num ; $i ++) { $code .= $str [mt_rand(0, strlen ( $str )-1)]; } //创建验证码画布 $im = imagecreatetruecolor( $width , $height ); //背景色 $back_color = imagecolorallocate( $im , mt_rand(0,100),mt_rand(0,100), mt_rand(0,100)); //文本色 $text_color = imagecolorallocate( $im , mt_rand(100, 255), mt_rand(100, 255), mt_rand(100, 255)); imagefilledrectangle( $im , 0, 0, $width , $height , $back_color ); // 画干扰线 for ( $i = 0; $i < 5; $i ++) { $font_color = imagecolorallocate( $im , mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255)); imagearc( $im , mt_rand(- $width , $width ), mt_rand(- $height , $height ), mt_rand(30, $width * 2), mt_rand(20, $height * 2), mt_rand(0, 360), mt_rand(0, 360), $font_color ); } // 画干扰点 for ( $i = 0; $i < 50; $i ++) { $font_color = imagecolorallocate( $im , mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255)); imagesetpixel( $im , mt_rand(0, $width ), mt_rand(0, $height ), $font_color ); } //随机旋转角度数组 $array = array (5,4,3,2,1,0,-1,-2,-3,-4,-5); // 输出验证码 // imagefttext(image, size, angle, x, y, color, fontfile, text) @imagefttext( $im , $size , array_rand ( $array ), 12, $size + 6, $text_color , 'c:\WINDOWS\Fonts\simsun.ttc' , $code ); $_SESSION [ "VerifyCode" ]= $code ; //no-cache在每次请求时都会访问服务器 //max-age在请求1s后再次请求会再次访问服务器,must-revalidate则第一发送请求会访问服务器,之后不会再访问服务器 // header("Cache-Control: max-age=1, s-maxage=1, no-cache, must-revalidate"); header( "Cache-Control: no-cache" ); header( "Content-type: image/png;charset=gb2312" ); //将图片转化为png格式 imagepng( $im ); imagedestroy( $im ); } ?> |
效果图:
以上就是本文的全部内容,希望对大家学习php程序设计有所帮助,大家学会编写php图片验证码