当前位置:首页 > PHP

php实现图形验证码

2026-01-29 07:23:11PHP

生成随机验证码字符串

使用rand()mt_rand()函数生成随机数字,或结合chr()函数生成随机字母。验证码长度通常为4-6位:

$length = 4;
$code = '';
$charset = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
for ($i = 0; $i < $length; $i++) {
    $code .= $charset[rand(0, strlen($charset) - 1)];
}
$_SESSION['captcha'] = $code; // 存储到SESSION

创建图像资源

使用GD库创建画布并设置背景:

php实现图形验证码

$width = 100;
$height = 30;
$image = imagecreatetruecolor($width, $height);
$bgColor = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $bgColor);

添加干扰元素

增加干扰线或干扰点提高安全性:

// 干扰线
for ($i = 0; $i < 5; $i++) {
    $color = 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), $color);
}

// 干扰点
for ($i = 0; $i < 50; $i++) {
    $color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255));
    imagesetpixel($image, rand(0, $width), rand(0, $height), $color);
}

绘制验证码文本

将生成的验证码字符串绘制到图像上:

php实现图形验证码

$textColor = imagecolorallocate($image, 0, 0, 0);
$font = 5; // 内置字体
imagestring($image, $font, 30, 8, $code, $textColor);

// 若使用TTF字体
// $fontFile = 'path/to/font.ttf';
// imagettftext($image, 20, 0, 10, 25, $textColor, $fontFile, $code);

输出图像

设置HTTP头并输出图像:

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

完整示例代码

session_start();

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

$width = 100;
$height = 30;
$image = imagecreatetruecolor($width, $height);
$bgColor = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $bgColor);

for ($i = 0; $i < 5; $i++) {
    $color = 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), $color);
}

$textColor = imagecolorallocate($image, 0, 0, 0);
imagestring($image, 5, 30, 8, $code, $textColor);

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

验证用户输入

在表单提交处理页面验证:

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

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

相关文章

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js实现登录验证码

js实现登录验证码

实现登录验证码的步骤 生成随机验证码 使用JavaScript生成随机验证码字符串,通常包含数字和字母组合。可以定义一个函数来生成指定长度的验证码: function generateCaptcha…

js验证码实现原理

js验证码实现原理

验证码的基本概念 验证码(CAPTCHA)是一种区分用户是计算机还是人的公共全自动程序,主要用于防止恶意程序自动化操作,如批量注册、暴力破解等。JavaScript验证码通常结合前端逻辑与后端验证实现…

js实现验证码刷新

js实现验证码刷新

实现验证码刷新的方法 在JavaScript中实现验证码刷新通常涉及前端与后端的交互。以下是常见的实现方式: 基础实现方案 创建HTML元素放置验证码图片,并添加刷新按钮: <img id=…

js实现汉字验证码

js实现汉字验证码

实现汉字验证码的步骤 生成随机汉字 使用Unicode编码范围生成随机汉字,汉字的Unicode范围大致在\u4e00到\u9fa5之间。 function getRandomChinese() {…

js实现简单的验证码

js实现简单的验证码

实现简单的验证码功能 验证码通常用于防止自动化脚本提交表单。以下是一个基于JavaScript的简单验证码实现方法。 生成随机验证码 创建一个函数生成随机字母数字组合作为验证码: function…