本文介绍如何使用PHP实现验证码的制作,希望给有需要的人以帮助。
开发环境:
XAMPP集成开发环境(去官网下载安装即可)
安装后启动apache
站点目录是C:\xampp\htdocs
检查php是否只支持GD:
php语言需要依赖GD扩展实现验证码
通过
phpinfo();
查看是否支持
不支持GD应安装GD
通过php代码,生成一张100*30px的图片,方法是
resource imagecreatetruecolor(int $width,int $height)
注意:
这依赖GD扩展,输出图片前必须提供输出图片header信息,默认输出为黑色背景
在底图上显示随机数字方法是:
int imagecolorallocate(resource $image,int $red,int $green,int $blue)
bool imagestring(resource $image,int $font,int $x,int $y, string $s,int $col)
注意:
控制字体大小与分布,避免字体重叠或显示不全。
为验证码增加干扰元素,干扰的点或线,方法是:
bool imagesetpixel(resource $image,int $x,int $y,int $color)
bool image line(resource $image,int $x1,int $y1,int $x2,int $y2,int $color)
注意:
干扰信息要控制好颜色
让图片上的验证码内容为字母或字母数字的混合体,方法是:
int rand(int $min,int $max)
mixed array_rand(array $input[,iint $num_req=1])
通过session在服务器端记录验证码信息,便于用户输入后校验,方法是:
bool session_start(void)
注意:
session_start必须在脚本的最顶部,多服务器情况下需要考虑集中管理session信息
编辑form.php
实现验证码的动态验证只需:
增加可点击的”换一个“按钮,用JS选择器选取验证码图片,用JS修改验证码图片地址
在站点目录下创建project目录,在其中创建capture.php以编写验证码与form.php以创建表单
下面是capture.php:
//制作图片
$image=imagecreatetruecolor(100,30);
$bgcolor=imagecolorallocate($image,255,255,255);
imagefill($image,0,0,$bgcolor);
//制作数字
/*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);
}*/
//制作数字字母并保存于captch_code中
$captch_code='';
for ($i=0;$i<4;$i++){
$fontsize=6;
$fontcolor=imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));
$data='abcdefghijklmnopqrstuvwxyz23456789';
$fontcontent=substr($data,rand(0,strlen($data)),1);
$captch_code.=$fontcontent;
$x=($i*100/4)+rand(5,10);
$y=rand(5,10);
imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
}
$_SESSION['authcode']=$captch_code;
//添加点干扰
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);
}
header('content-type:image/png');
imagepng($image);
imagedestroy($image);
?>
下面是form.php:
if(isset($_REQUEST['authcode'])){
session_start();
if(strtolower($_REQUEST['authcode'])==$_SESSION['authcode']){
echo"输入正确";
}
else{
echo"输入错误";
}
exit();
}
?>
<html>
<head>
<meta charset="utf-8"/>
<title>确认验证码title>
head>
<body>
<form method="post" action="./form.php">
<p>验证码图片:<img id="capture_image" border="1" src="./capture.php?r=" width="100" height="30"/>
<a href="javascript:void(0)" onclick="document.getElementById('capture_image').src='./capture.php?r='+Math.random()">换一个?a>
p>
<p>请输入验证码:<input type="text" name="authcode" value=""/>p>
<p><input type="submit" value="提交" style=padding:6px 20px;">p>
form>
body>
html>
具体课程请去慕课网寻找课程”PHP实现验证码制作“学习