当前位置:首页 > PHP

php实现图形验证码

2026-04-03 13:36:07PHP

实现图形验证码的基本步骤

使用 PHP 生成图形验证码主要依赖 GD 库或 Imagick 扩展。以下是基于 GD 库的实现方法。

创建画布并生成随机字符串

初始化画布并生成随机验证码字符串,通常包含数字和字母组合。

session_start();
$width = 120;
$height = 40;
$image = imagecreatetruecolor($width, $height);
$bgColor = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $bgColor);

$chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789';
$code = '';
for ($i = 0; $i < 4; $i++) {
    $code .= $chars[rand(0, strlen($chars) - 1)];
}
$_SESSION['captcha'] = $code;

添加干扰元素

为增强安全性,可添加干扰线或干扰点,防止机器识别。

for ($i = 0; $i < 6; $i++) {
    $lineColor = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255));
    imageline($image, rand(0, $width), rand(0, $height), rand(0, $width), rand(0, $height), $lineColor);
}

for ($i = 0; $i < 100; $i++) {
    $pixelColor = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255));
    imagesetpixel($image, rand(0, $width), rand(0, $height), $pixelColor);
}

绘制验证码文字

将随机生成的验证码字符串绘制到画布上,可调整字体、颜色和位置。

$fontFile = 'path/to/font.ttf'; // 替换为实际字体文件路径
for ($i = 0; $i < strlen($code); $i++) {
    $textColor = imagecolorallocate($image, rand(0, 150), rand(0, 150), rand(0, 150));
    imagettftext($image, 20, rand(-10, 10), 10 + $i * 30, 30, $textColor, $fontFile, $code[$i]);
}

输出验证码图像

设置响应头并输出图像,确保浏览器正确解析为图片格式。

header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);

验证用户输入

在表单提交时,比对用户输入与 Session 中存储的验证码。

php实现图形验证码

session_start();
if (strtolower($_POST['captcha']) === strtolower($_SESSION['captcha'])) {
    echo '验证码正确';
} else {
    echo '验证码错误';
}

注意事项

  • 确保服务器已安装 GD 库(可通过 phpinfo() 检查)。
  • 字体文件需可读,若无需特殊字体可用 imagestring() 替代 imagettftext()
  • 生产环境建议增加更多干扰措施(如扭曲文字、背景噪点)。
  • 验证码生成后应立即销毁 Session 中的旧值,防止重复使用。

标签: 验证码图形
分享给朋友:

相关文章

uniapp图形绘制

uniapp图形绘制

Uniapp 图形绘制方法 Uniapp 提供了多种图形绘制的方式,适用于不同场景需求。以下是常见的实现方法: Canvas 绘制 Uniapp 支持使用 HTML5 Canvas API 进行图形…

php实现获取验证码

php实现获取验证码

使用GD库生成验证码 在PHP中,可以通过GD库来生成验证码图片。以下是一个简单的实现示例: <?php session_start(); $width = 120; $height = 40…

css图形制作

css图形制作

CSS 图形制作基础 CSS 可以通过 border、transform、clip-path 等属性创建基本图形,无需依赖图片或 SVG。 矩形与正方形 通过 width 和 height 控制尺寸…

php验证码实现原理

php验证码实现原理

PHP验证码实现原理 验证码(CAPTCHA)用于区分人类用户和自动化程序,防止恶意攻击。PHP实现验证码通常涉及生成随机字符串、创建图像、干扰元素添加和会话存储。 生成随机字符串 使用PHP的随机…

php实现图片验证码

php实现图片验证码

生成随机验证码字符串 使用PHP的rand()或mt_rand()函数生成随机数,并通过字符串拼接形成验证码。常见做法是混合数字和字母: $chars = 'ABCDEFGHJKLMNPQRSTUV…

php实现图形验证码

php实现图形验证码

生成随机验证码字符串 使用rand()或mt_rand()函数生成随机数字,或结合chr()函数生成随机字母。验证码长度通常为4-6位: $length = 4; $code = ''; $char…