本文根据慕课网视频制作
在我们进行登录或者注册时,会出现各种奇形怪状的验证码(当然正常的居多),我们需要认真输入才能通过验证~当然现在采取了某些更加高级的技术,这些我们不谈。 验证码存在的意义就是用来区分到底是人在登录还是机器在登录。服务器的资源是有限的,我们需要通过一种机制将这些机器请求给屏蔽掉,从而使资源为人服务。我们来看看怎么用PHP来实现这个功能~
先看看具体步骤
1.生成验证码底图
2.验证码内容生成
3.产生后增加某些干扰元素
4.生成验证码,以及对比校验。
我们再来看看所要掌握的核心技术~
1、PHP图片处理库GD
2、随机数,随机字母,RGB颜色基本理解
3、SESSION基础
4、AJAX基础
上正餐~~
<?php
session_start();
$image = imagecreatetruecolor(100, 30);
$bgcolor = imagecolorallocate($image, 255, 255, 255);
imagefill($image,0,0,$bgcolor);//GD库需要了解一下~~~
$captch_code='';
for($i=0;$i<4;$i++){
$fontsize=6;
$fontcolor=imagecolorallocate($image, rand(0,120), rand(0,120),rand(0,120));
$data='abcdefghigklmnopqrstuvwxyz1234567890';
$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);
$captch_code.=$fontcontent;
}
$_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);//别忘了释放资源
?>
其实总体来说代码很简单
最后我们可以再写一个表单提交,判断用户验证是否正确
<?php
header("Content-Type: text/html; charset=utf-8");
if (isset($_REQUEST['authcode'])) {
session_start();
if(strtolower($_REQUEST['authcode'])==$_SESSION['authcode']){
echo "输入正确";
}else{
echo "输入错误";
}
exit();
}
?>
这是我昨天学习的,总体来说还算简单,比较容易上手的一个案例。在后面就可以进阶的做一个文字或者图片验证码了——
热门评论
写一个表单提交,判断用户验证是否正确。应该写在哪?我写在验证码下面,在什么显示乱码?
对,我觉的注释就特别重要
你的字体怎么不设置?