php验证码制作
2015-10-14 23:30
621 查看
我在这里想要分享一下我最近学习的听过php内置的GD库来实现验证码
至于在编写过程中用到gd库中的函数我会稍加解释,需要详细了解gd库函数的可以查看api文档地址http://www.php100.com/cover/php/626.html
1,首先我们需要在新建得php网页中新建一个图片,也就是验证码的底图
b:imagecolorallocate(resource $image,$color,$color,$color)
此函数为资源图配色
c:imagefill 将颜色涂满图片
由此我们创建了一个宽为100px,高为30px的白色图片
2,我们需要在白色图片上随机产生四个数字
a:rand() 产生随机数字
b:imagestring($iamge,$fontsize,$x,$y,$fontcont,$fontcolor) 通过此函数实现数字的输出并且控制颜色以及定位
这里的重点就是产生出来的四个验证码的定位问题
[b]3,产生的字母与数字混排的验证码[/b]
a:substr() 截取字符输出
产生字母与数字混排的验证码
4,为产生的验证码添加点和线的干扰以防止机器的破解
b:imageline() 同样实现线的函数与点的类似,只是坐标轴通过两个点固定
添加了线与点的干扰
5,输出header信息
6,html页面的实现
7,验证码展示
至于在编写过程中用到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,验证码展示
相关文章推荐
- PHP zendstudio framework2配置过程
- H.264 基础及 RTP 封包详解
- 利用php-java-bridge包实现PHP调用JAVA类
- Thinkphp——(后台栏目列表)栏目及子栏目的创建及显示实例操作
- 7款本地搭建PHP环境工具推荐
- ftp主动模式与被动模式的区别
- PHP操作MySQL服务器
- PHP 进阶
- D题 - A+B for Input-Output Practice (III)
- php学习-- 8 异常,生成器
- C题 - A+B for Input-Output Practice (II)
- 利用PHP SOAP实现WEB SERVICE
- PHP中soap的使用例子
- php生成zip压缩文件的方法,支持文件和压缩包路径查找
- B题 - A+B for Input-Output Practice (I)
- PHP使用SOAP调用.net的WebService数据
- pgadmin & phppgadmin的配置
- VSFTPD服务器
- php性能优化
- PHP设计模式——迭代模式