验证码的使用场景:用户登录/注册页面 (常见)
验证码的实现步骤:(1)创建一个图像资源
(2)给图像资源分配颜色
(3)填充颜色
(4)绘制元素并填充
(5)生成并保存图像
(6)销毁图像资源
接下来来看看提交验证码的实现实例吧。
新建一个login.php
login.php下的 html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="./login.php" method="post">
<img src="./index.php" onclick="this.src = this.src +'?'+new Date().getTime();" ><br/>
<input type="text" name="captcha" placeholder="请输入图片中的验证码"><br/>
<input type="submit" value="验证" name="submit">
</form>
</body>
</html>
php 验证代码块:
<?php
session_start();
if (isset($_POST['submit'])) {
$captcha = $_POST['captcha'];
if (strtolower($captcha) == strtolower($_SESSION['captcha'])) {
echo '验证码正确,正式登录';
$_SESSION['captcha'] = null;
} else {
echo '验证码错误,请重新输入';
}
}
?>
生成验证码(captcha.php):
<?php
session_start();
/* ------------------------------------------创建英文数字验证码 ---------------------------------------------- */
$width = 117;
$height = 42;
$alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz0123456789";
$fontSize = 18; //字体大小
$font = __DIR__. "/font/arial.ttf"; //设置字体路径
$j = 0;
$captcha = '';
//1、创建图像资源 (通过imagecreate/imagecreatetruecolor创建图像资源)
$image = imagecreate($width, $height); //1、创建图像资源 (width=117,height=42)
//2、分配颜色(通过 imagecolorallocate 分配颜色)
$color = imagecolorallocate($image, 255, 255,255); //2、imagecolorallocate()分配颜色
//3、填充颜色 (通过 imagefill 填充颜色)
imagefill($image,0,0,$color);
//4、填充元
for ($i = 0;$i < 4;$i++) {
// 字体颜色
$color3 = imagecolorallocate($image, 87, 123, 35);
$j = !$i ? 15 : $j+25;
//设置字体内容
$code = substr($alpha, mt_rand(0, strlen($alpha)-1), 1);
$captcha .= $code;
//设置字体坐标
$y = 29;
//$x = ($i * 99 / 4) + mt_rand(5, 20);
imagettftext($image, $fontSize, 0, $j, $y, $color3, $font, $code); //这种填充方式需要加载字体文件
//imagestring($image, $fontSize, $x, $y, $code, $color3); //这种填充不需要字体文件
}
for ($i = 0; $i < 200; $i++) {
$pointcolor = imagecolorallocate($image, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200));
imagesetpixel($image, mt_rand(1, 117), mt_rand(1, 41), $pointcolor);
}
for ($i = 0; $i < 10; $i++) {
$linecolor = imagecolorallocate($image, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200));
imageline($image, mt_rand(1, 117), mt_rand(1, 43), mt_rand(1, 117), mt_rand(1, 43), $linecolor);
}
$_SESSION["captcha"] = $captcha;
header("Content-type:image/gif");
imagegif($image);
//7.销毁图片
imagedestroy($image);