当前位置: 首页> 最新文章列表> 如何用PHP制作基础图像验证码并进行表单验证

如何用PHP制作基础图像验证码并进行表单验证

M66 2025-06-23

使用PHP实现基础图像验证码功能

图像验证码广泛应用于网站注册、登录、评论等场景,是提升表单安全性、抵御自动脚本攻击的重要手段。本文将带你一步步实现一个简单的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机制完成服务端验证,适合大多数中小型项目需求。

后续可在此基础上进一步扩展,例如:

  • 增加验证码字符类型(数字+字母)

  • 添加图形干扰线

  • 动态生成字体大小与角度

  • 加入验证码过期时间等

合理设计验证码不仅有助于防止恶意攻击,还能提升系统整体安全性。