验证码生成通过PHP GD库创建图像,步骤包括:1. 创建画布并设置背景色;2. 添加噪点干扰;3. 写入随机字符;4. 输出图像并存储验证码内容用于后续验证。

验证码生成是PHP项目中常见的安全机制,主要用于防止机器人恶意提交表单,比如注册、登录、评论等场景。通过生成一张包含随机字符的图片,让用户输入识别内容,从而验证操作者是否为真人。以下是使用PHP实现验证码生成与验证的核心方法。
利用PHP的GD库可以动态生成图像。核心步骤包括创建画布、绘制背景、添加干扰元素、写入随机字符。
示例代码:
function generateCaptcha() {
$width = 120;
$height = 40;
$image = imagecreate($width, $height);
$bgColor = imagecolorallocate($image, 255, 255, 255); // 白色背景
$textColor = imagecolorallocate($image, 0, 0, 0); // 黑色文字
$noiseColor = imagecolorallocate($image, 150, 150, 150);
// 添加噪点
for ($i = 0; $i < 50; $i++) {
imagesetpixel($image, rand(0, $width), rand(0, $height), $noiseColor);
}
// 生成随机文本
$captchaText = substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyz"), 0, 5);
// 存入Session便于后续验证
session_start();
$_SESSION['captcha'] = $captchaText;
// 写入图像
imagestring($image, 5, 20, 10, $captchaText, $textColor);
// 输出图像
header("Content-type: image/png");
imagepng($image);
imagedestroy($image);
}
将上述函数保存为 captcha.php,在HTML中通过 <img src="captcha.php"> 调用即可显示验证码图片。
立即学习“PHP免费学习笔记(深入)”;
当用户提交表单时,需比对输入值与Session中存储的验证码是否一致。
session_start();
if ($_POST['captcha_input']) {
$userInput = strtolower(trim($_POST['captcha_input']));
$storedCaptcha = $_SESSION['captcha'] ?? '';
if ($userInput === $storedCaptcha) {
echo "验证通过";
// 可继续处理登录或注册逻辑
} else {
echo "验证码错误,请重试";
}
// 验证完成后清除Session防止重复使用
unset($_SESSION['captcha']);
}
基础实现可能存在被绕过或暴力破解的风险,可通过以下方式提升安全性:
imagettftext() 加载TTF字体,使字符更难被OCR识别。对于更高安全需求,可考虑集成第三方服务,如Google reCAPTCHA,无需自己维护图像生成逻辑,且具备行为分析能力。但对于轻量级项目,原生PHP GD方案仍是最直接有效的选择。
基本上就这些。只要合理使用Session配合图像输出,就能实现一个简单但实用的验证码系统。注意每次生成后更新Session值,并在验证后及时清理,避免安全隐患。
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号