PHP实现验证码功能
//先做个记录,功能还不完善,界面还太丑
画图的时候要安装扩展库gd2,我安装的命令是sudo apt-get install php-gd,加上php版本号之后说找不到包,就多尝试几次了
captcha.php
<?php
//设置session,开启会话功能
session_start();
//设置验证码图片大小
$image = imagecreatetruecolor(100,30);//新建一个真彩色图像,第一个参数为长,第二个参数为高
//设置验证码的颜色
$bgcolor = imagecolorallocate($image,255,255,255);//#ffffff白色
//区域填充
imagefill($image,0,0,$bgcolor);//将(0,0)所在的区域填上$bgcolor的颜色
//生成随机数字
for( $i = 0; $i < 4; $i++){
//设置字体大小
$fontsize = 6;
//设置字体颜色,随机颜色 0-120深色
$fontcolor = imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));
//设置数字
$fontcontent = rand(0,9);
//连续定义变量
$captcha_code .= $fontcontent;
//设置坐标
$x = ($i*100/4)+rand(5,10);
$y = rand(5,10);
imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
}
//存到session中作为全局变量
$_SESSION['authcode'] = $captcha_code;
//增加干扰元素,设置雪花点
for( $i = 0; $i < 200; $i++){
//设置点的颜色,50-200颜色比数字要浅,不干扰阅读
$pointcolor = imagecolorallocate($image,rand(50,200),rand(50,200),rand(50,200));
//imagesetpixel() 画一个单一元素
imagesetpixel($image,rand(1,99),rand(1,29),$pointcolor);
}
//增加干扰元素,设置横线
for( $i = 0; $i < 4; $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);
}
//设置头部 image/png
header("Content-Type: image/png");
//imagepng()建立png图形函数
imagepng($image);
//imagedestroy()结束图形函数 销毁$image
imagedestroy($image);
?>
index.html
<html>
<head>
<meta http-equiv="content-type" content="text/html"; charset="utf-8">
<title>实现验证功能</title>
</head>
<body>
<form method="post" action="form.php">
<p>
<!-- r=echo rand();防止图片一成不变 -->
验证码:<img id="captcha_img" border="1" src="captcha.php?r=echo rand()" style="width:100px; height:30px" /><br>
<a href="index.html" οnclick="document.getElementById('captcha_img').src='captcha_php?r+Math.random()'">换一个</a>
</p>
<p>
请输入验证码:<input type="text" name="authcode" value=""/>
</p>
<p>
<input type="submit" name="提交" style="padding:6px 5px;"/>
</p>
</form>
</body>
</html>
form.php
<?php
header("Content-Type:text/html;charset=utf-8"); //设置头部信息
//isset()检测变量是否设置
if(isset($_REQUEST['authcode'])){
session_start();
//strtolower()小写函数
if(strtolower($_REQUEST['authcode']) == $_SESSION['authcode']){
//跳转页面
echo "<script language=\"javascript\">";
echo "alert('输入正确!');";
echo "document.location=\"./form.php\"";
echo "</script>";
}else{
//提示以及跳转页面
echo "<script language=\"javascript\">";
echo "alert('输入错误!');";
echo "document.location=\"./form.php\"";
echo "</script>";
}
exit();
}
还没有评论,来说两句吧...