当前位置: 首页> 最新文章列表> 如何使用PHP生成和验证图片验证码教程

如何使用PHP生成和验证图片验证码教程

M66 2025-07-01

PHP实现图片验证码的生成和验证

在网站开发过程中,为了防止自动化的恶意攻击或者自动注册,我们常常使用图片验证码来进行验证。本文将为大家展示如何利用PHP来生成和验证图片验证码,并提供了相关的代码示例。

生成图片验证码

生成图片验证码的核心在于生成一个随机验证码字符串,并将其绘制到图片上。下面是一个PHP代码示例:

<?php
session_start();

// 声明图片尺寸
$image_width = 100;
$image_height = 40;

// 创建图片资源
$image = imagecreatetruecolor($image_width, $image_height);

// 生成背景颜色
$bg_color = imagecolorallocate($image, mt_rand(200, 255), mt_rand(200, 255), mt_rand(200, 255));
imagefill($image, 0, 0, $bg_color);

// 生成验证码字符串
$chars = 'ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz23456789';
$code = '';
for ($i = 0; $i < 4; $i++) {
    $code .= $chars[mt_rand(0, strlen($chars) - 1)];
}

// 将验证码字符串保存到session中,用于后续验证
$_SESSION['captcha'] = $code;

// 绘制验证码文字
$font_file = 'path_to_your_font.ttf'; // 替换为你自己的字体文件路径
$text_color = imagecolorallocate($image, 0, 0, 0); // 文字颜色为黑色
imagettftext($image, 20, 0, 10, 30, $text_color, $font_file, $code);

// 输出图片
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>

上述代码首先通过imagecreatetruecolor函数创建一个指定宽度和高度的图片资源。接着,通过imagecolorallocate函数生成背景颜色并填充整个图片,最后用imagettftext函数在图片上绘制验证码字符串,最后用imagepng函数输出生成的图片。

验证图片验证码

在验证图片验证码时,我们需要将用户输入的验证码与保存在session中的验证码进行比对。以下是验证验证码的PHP代码示例:

<?php
session_start();

// 获取用户输入的验证码字符串
$user_input = $_POST['captcha'];

// 获取保存在session中的验证码字符串
$server_code = $_SESSION['captcha'];

// 验证用户输入的验证码与保存的验证码是否一致
if (strcasecmp($user_input, $server_code) === 0) {
    // 验证码正确,执行相应的操作
    echo '验证码正确';
} else {
    // 验证码错误,提示用户重新输入
    echo '验证码错误';
}
?>

上述代码首先开启session,然后通过$_POST数组获取用户输入的验证码,再通过$_SESSION数组获取保存在session中的验证码字符串。通过strcasecmp函数比较两个字符串,如果匹配,则表示验证码正确,可以执行相应的操作;如果不匹配,则提示验证码错误。

总结

通过上述两段PHP代码,我们可以成功实现图片验证码的生成和验证功能。生成验证码的代码可以保存为一个独立的文件,例如captcha.php,用户请求时只需访问该文件即可生成验证码。而验证验证码的代码则可以放置在表单提交的处理页面中。

在实际应用中,除了上述功能外,你还可以根据需要增加一些安全措施,如添加干扰线、加密验证码等。