验证码为全自动区分计算机和人类的图灵测试的缩写。是一种区分用户是计算机和人的公共全自动程序。
验证码主要应用场景:登录、注册确定前,发布、回复信息前,疑似机器请求时,做人/机器校验。
实现步骤:
(1)生成底图;
依赖php图片处理库GD
(2)生成验证内容;(推荐学习:PHP编程从入门到精通)
产生随机数,使用php函数rand();
(3)生成验证码图片;
(4)校验验证内容
需要php操作SESSION基础,将验证内容保存在服务器端;前端Ajax基础
代码:
新建一个captcha.php文件,写入下列代码。实现验证码图片:
<?php<br /> <br />//必须至于顶部,多服务器端记录验证码信息,便于用户输入后做校验<br /> session_start();<br /> <br /> //默认返回的是黑色的照片<br /> $image = imagecreatetruecolor(100, 30);<br /> //将背景设置为白色的<br /> $bgcolor = imagecolorallocate($image, 255, 255, 255);<br /> //将白色铺满地图<br /> imagefill($image, 0, 0, $bgcolor);<br /> <br /> //空字符串,每循环一次,追加到字符串后面 <br /> $captch_code='';<br /> <br /> //验证码为随机四个数字<br /> for ($i=0; $i < 4; $i++) { <br /> $fontsize=6;<br /> $fontcolor=imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));<br /> <br /> //产生随机数字0-9<br /> $fontcontent = rand(0,9);<br /> $captch_code.= $fontcontent;<br /> //数字的位置,0,0是左上角。不能重合显示不完全<br /> $x=($i*100/4)+rand(5,10);<br /> $y=rand(5,10);<br /> imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);<br /> }<br /> <br /> <br /> <br /> $_SESSION['authcode'] = $captch_code;<br />//为验证码增加干扰元素,控制好颜色,<br />//点 <br /> for ($i=0; $i < 200; $i++) { <br /> $pointcolor = imagecolorallocate($image,rand(50,200),rand(50,200),rand(50,200));<br /> imagesetpixel($image, rand(1,99), rand(1,29), $pointcolor);<br /> }<br /> <br />//为验证码增加干扰元素<br />//线 <br /> for ($i=0; $i < 3; $i++) { <br /> $linecolor = imagecolorallocate($image,rand(80,220),rand(80,220),rand(80,220));<br /> imageline($image, rand(1,99), rand(1,29),rand(1,99), rand(1,29) ,$linecolor);<br /> }<br /> <br /> header('content-type:image/png');<br /> imagepng($image);<br /> <br /> //销毁<br /> imagedestroy($image);<br />
查看效果如下:刷新一次,内容或会变化一次
新建一个form.php文件,写入下列代码。实现校验:
<?php<br /> <br /> if (isset($_REQUEST['authcode'])) {<br /> session_start();<br /> <br /> if (strtolower($_REQUEST['authcode'])==$_SESSION['authcode']) {<br /> echo'<font color ="#0000CC"> 输出正确</font>';<br /> # code...<br /> }else{<br /> echo $_REQUEST['authcode'];<br /> echo $_SESSION['authcode'];<br /> echo'<font color ="#CC0000"> 输出错误</font>';<br /> }<br /> <br /> exit();<br /> <br /> }<br />?><br /> <br /><!DOCTYPE html><br /><html><br /> <head><br /> <meta charset="utf-8" /><br /> <title>确认验证码</title><br /> </head><br /> <body><br /> <form method="" ="post" action="./form.php"><br /> <p>验证码图片:<br /> <img id="captcha_img" border="1" src="./captcha.php?r=<?php echo rand(); ?>" alt="" width="100" height="30"><br /> <br /> <a href="javascript:void(0)" οnclick="document.getElementById('captcha_img').src='./captcha.php?r='+Math.random() ">换一个?</a><br /> </p><br /> <br /> <p>请输入图片中的内容:<br /> <input type="text" name="authcode" value="" /><br /> </p><br /> <br /> <p><br /> <input type="submit" value="提交" style="padding: 6px 20<a style="color:transparent">来源gao*daima.com搞@代#码网</a>px;"><br /> </p><br /> <br /> </form><br /> </body><br /> <br /></html><br />