php验证码制作

我在这里想要分享一下我最近学习的听过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)      通过此函数实现数字的输出并且控制颜色以及定位

这里的重点就是产生出来的四个验证码的定位问题


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

<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)"οnclick="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,验证码展示


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值