图像验证码广泛应用于网站注册、登录、评论等场景,是提升表单安全性、抵御自动脚本攻击的重要手段。本文将带你一步步实现一个简单的PHP图像验证码系统,依赖PHP的GD图形库完成图像生成,并结合会话机制完成验证码验证。
在开始之前,请确认你的服务器环境中已经启用了GD库。GD库是PHP中处理图形图像的扩展模块,用于动态创建图像。可以通过执行 phpinfo() 来检查是否启用该扩展。
创建一个名为 captcha.php 的文件,使用GD库动态生成带有随机数字的图像,并将生成的验证码值存入 $_SESSION 中,供后续验证使用。
以下是验证码图片的生成代码:
<?php
session_start();
// 生成随机的四位验证码
$code = rand(1000, 9999);
// 将验证码存储到会话中
$_SESSION['captcha_code'] = $code;
// 创建图像资源
$image = imagecreatetruecolor(120, 40);
// 设置背景颜色为白色
$bg_color = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $bg_color);
// 添加干扰点
for ($i = 0; $i < 100; $i++) {
$point_color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255));
imagesetpixel($image, rand(0, 120), rand(0, 40), $point_color);
}
// 设置文字颜色为黑色
$text_color = imagecolorallocate($image, 0, 0, 0);
// 绘制验证码文字(确保字体路径正确)
imagettftext($image, 20, 0, 30, 30, $text_color, 'path/to/font.ttf', $code);
// 输出图像到浏览器
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>
在前端页面中嵌入验证码图像,可以使用以下方式调用 captcha.php:
<img src="captcha.php" alt="验证码">
建议为图片添加刷新功能,例如点击图片重新加载验证码,以增强用户体验。
在用户提交表单时,需要将用户输入的验证码与会话中存储的值进行比对,判断是否输入正确。以下是验证代码示例:
<?php
session_start();
if (isset($_POST['captcha'])) {
$user_input = $_POST['captcha'];
if ($user_input == $_SESSION['captcha_code']) {
// 验证成功,执行相应操作
} else {
// 验证失败,提示重新输入
}
}
?>
该逻辑适用于用户注册、登录验证等任何需要确认操作的表单场景。
通过本篇教程,你已经了解了使用PHP与GD库实现图像验证码的基本方法。该方案通过生成包含随机字符的图像,结合Session机制完成服务端验证,适合大多数中小型项目需求。
后续可在此基础上进一步扩展,例如:
增加验证码字符类型(数字+字母)
添加图形干扰线
动态生成字体大小与角度
加入验证码过期时间等
合理设计验证码不仅有助于防止恶意攻击,还能提升系统整体安全性。