PHP开发之验证码
很多网站登录时都会有个验证码,下面我们就来介绍验证码功能的实现方法。
在前段登录页面代码中有这么一段:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"> <meta name="format-detection" content="telephone=no" /> <title>登录页面实例展示</title> <link rel="stylesheet" type="text/css" href="/phpMyAdmin/login.css"/> </head> <body> <p> <span> <input type="text" name="code" id="code" class="pf_ipt_verify w230" placeholder="验证码" autocomplete="off" tabindex="3"/> <img src="/phpMyAdmin/code.php" onClick="this.src='/phpMyAdmin/code.php?nocache='+Math.random()" style="cursor:hand"> </span> </p> </body> </html>
这个就是我们在页面上见到的验证码的图片。给验证码图片一个点击事件,就可以实现点击一次图片,更换不同的数字了。
另外,验证码是如何生成的呢,就是下面这段代码:
<?php session_start(); Header("Content-type:image/PNG"); $im = imagecreate(150,45); $back = imagecolorallocate($im, 245, 245, 245); imagefill($im, 0,0, $back); $vcodes = ""; for($i = 0; $i < 4; $i++){ $font = imagecolorallocate($im, rand(100, 255), rand(0, 100), rand(100, 255)); $authnum = rand(0, 9); $vcodes .= $authnum; imagestring($im, 5, 50 + $i * 10, 20, $authnum, $font); } $_SESSION['VCODE'] = $vcodes; for($i=0;$i<200;$i++) { $randcolor = imagecolorallocate($im, rand(0, 255), rand(0, 255), rand(0, 255)); imagesetpixel($im, rand()%150, rand()%150, $randcolor); // } imagepng($im); imagedestroy($im); ?>
这是代码生成的后台程序。
在登录的后端代码中对代码进行判断,一是判断有没有输入,二是判断输入的对不对,代码如下:
if(!$_POST['code']){ echo('验证码不能为空'); return; }else if($_POST['code']!=$_SESSION['VCODE']){ echo('验证码不正确'); return; }