您的位置:首页 > 编程语言 > PHP开发

php验证码制作

2015-10-14 23:30 621 查看
我在这里想要分享一下我最近学习的听过php内置的GD库来实现验证码

至于在编写过程中用到gd库中的函数我会稍加解释,需要详细了解gd库函数的可以查看api文档地址http://www.php100.com/cover/php/626.html

1,首先我们需要在新建得php网页中新建一个图片,也就是验证码的底图

<span style="font-family:SimSun;font-size:10px;">$image=imagecreatetruecolor(100,30);
$bgcolor=imagecolorallocate($image,255,255,255);
imagefill($image,0,0,$bgcolor);
//产生白色底图</span>
a:imagecreatetryecolor($width,$width) 通过此函数创建了一个宽为100px,高为30px的真彩色图像。默认是黑色的

b:imagecolorallocate(resource $image,$color,$color,$color)
此函数为资源图配色

c:imagefill 将颜色涂满图片

由此我们创建了一个宽为100px,高为30px的白色图片

2,我们需要在白色图片上随机产生四个数字

<span style="font-size:10px;">for($i=0;$i<4;$i++){
$fontsize=6;
$fontcolor=imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));
$fontcontent=rand(0,9);
$x=($i*100/4)+rand(5,10);
$y=rand(5,10);
imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
}
//产生随机四个数字,放在底图上的字符串	</span>


a:rand() 产生随机数字
b:imagestring($iamge,$fontsize,$x,$y,$fontcont,$fontcolor) 通过此函数实现数字的输出并且控制颜色以及定位
这里的重点就是产生出来的四个验证码的定位问题

[b]3,产生的字母与数字混排的验证码[/b]

<span style="font-size:10px;">for($i=0;$i<4;$i++){
$fontsize=6;
$fontcolor=imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));
$data='abcdefghijkmnpqrstuvwxy3456789';
$fontcontent=substr($data,rand(0,strlen($data)),1);
$x=($i*100/4)+rand(5,10);
$y=rand(5,10);
imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);}</span><span style="font-family: Arial;font-size:10px;">	</span>


a:substr() 截取字符输出

产生字母与数字混排的验证码

4,为产生的验证码添加点和线的干扰以防止机器的破解

for($i=0;$i<200;$i++){
$pointcolor=imagecolorallocate($image,rand(50,200),rand(50,200),rand(50,200));
imagesetpixel($image,rand(1,99),rand(1,29),$pointcolor);
}
//增加点

for($i=0;$i<3;$i++){
$linecolor=imagecolorallocate($image,rand(80,220),rand(80,220),rand(80,220));
imageline($image,rand(1,99),rand(1,29),rand(1,99),rand(1,29),$linecolor);
}
//增加线
a:imagesetpixel() 函数实现点的输出,通过i循环输出了200个点,每个点都为单像素点,函数中的rand()函数分别随机产生点的x坐标和y坐标

b:imageline() 同样实现线的函数与点的类似,只是坐标轴通过两个点固定
添加了线与点的干扰

5,输出header信息

header('content-type:image/png');
imagepng($image);
imagedestroy($image);
?>
注意:这里输出header信息必须在产生验证码图片后面

6,html页面的实现

<span style="font-size:10px;"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>验证码测试</title>
</head>
<body>
<form method="post" action="testdemo.php">
<img border="1" id="cap" src="testdemo.php?r=<?php echo rand();?>" width="100" height="30"  />
<a href="javascript:void(0)"onclick="document.getElementById('cap').src='testdemo.php?r=+Math.random()'">换一个</a>
</form>
</body>
</html></span><strong style="color: rgb(255, 0, 0);font-size:14px;">
</strong>
在这里我通过JavaScript实现了验证码的切换,至于验证码的验证可以通过JavaScript实现我在这里不多做介绍,至此我们完成了php验证码的制作

7,验证码展示

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: