当前位置:首页 > 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库创建画布并设置背景:

$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);
}

绘制验证码文本

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

$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);

验证用户输入

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

php实现图形验证码

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

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

相关文章

php实现验证码注册

php实现验证码注册

生成验证码图片 使用 PHP 的 GD 库生成验证码图片,创建一个包含随机字符的图像。以下代码示例生成一个 4 位数字验证码: session_start(); $width = 120; $hei…

js验证码实现原理

js验证码实现原理

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

js实现验证码刷新

js实现验证码刷新

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

js如何实现验证码

js如何实现验证码

生成验证码 使用Math.random()生成随机数,转换为字符串后截取指定位数。例如生成4位数字验证码: const code = Math.floor(Math.random() * 9000)…

java如何生成验证码

java如何生成验证码

生成验证码的方法 使用Java生成验证码可以通过多种方式实现,以下是几种常见的方法: 使用随机数和绘图库生成图片验证码 通过Java的BufferedImage和Graphics2D类可以绘制包含随…

uniapp验证码

uniapp验证码

uniapp验证码实现方法 使用第三方短信服务商API 在uniapp中调用短信服务商API发送验证码,需要后端配合完成。常见服务商包括阿里云短信、腾讯云短信、云片等。 前端调用示例: uni.r…