本文为大家分享了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图片验证码