当前位置:首页 > PHP

php如何实现验证码

2026-01-29 07:25:55PHP

生成验证码图片

使用 PHP 的 GD 库创建验证码图片。通过 imagecreatetruecolor() 函数创建一个空白画布,设置背景色和文本颜色。利用 imagestring()imagettftext() 函数将随机生成的验证码字符串绘制到图片上。

$width = 120;
$height = 40;
$image = imagecreatetruecolor($width, $height);
$bgColor = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $bgColor);
$textColor = imagecolorallocate($image, 0, 0, 0);
$code = substr(md5(uniqid()), 0, 6);
imagestring($image, 5, 30, 12, $code, $textColor);

添加干扰元素

为了提高安全性,可以在验证码图片中添加干扰线或噪点。使用 imageline() 函数绘制随机线条,或通过循环使用 imagesetpixel() 添加噪点。

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

输出验证码图片

通过 header() 函数设置正确的 Content-Type,并使用 imagepng()imagejpeg() 函数输出图片。确保在输出后调用 imagedestroy() 释放内存。

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

存储验证码

将生成的验证码字符串存储到 Session 中,以便后续验证。使用 session_start() 开启 Session,并将验证码存入 $_SESSION 数组。

session_start();
$_SESSION['captcha'] = $code;

验证用户输入

在表单提交后,比较用户输入的验证码与 Session 中存储的值。使用 strtolower()strtoupper() 进行大小写不敏感的比较。

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

使用 Composer 包

对于更复杂的验证码需求,可以使用第三方库如 gregwar/captcha。通过 Composer 安装后,可以快速生成验证码图片并验证输入。

require_once 'vendor/autoload.php';
use Gregwar\Captcha\CaptchaBuilder;
$builder = new CaptchaBuilder;
$builder->build();
$_SESSION['phrase'] = $builder->getPhrase();
header('Content-Type: image/jpeg');
$builder->output();

php如何实现验证码

分享给朋友:

相关文章

vue实现验证码

vue实现验证码

Vue 实现验证码的方法 使用 Canvas 生成图形验证码 安装依赖(如需要): npm install vue-canvas-verify --save 创建验证码组件: <temp…

vue如何实现放大缩小

vue如何实现放大缩小

Vue 实现放大缩小功能 在 Vue 中实现放大缩小功能可以通过多种方式实现,以下介绍几种常见的方法: 使用 CSS transform 缩放 通过绑定 CSS 的 transform: scal…

如何实现vue表格联动

如何实现vue表格联动

实现 Vue 表格联动的方法 数据绑定与响应式更新 通过 Vue 的响应式特性,将多个表格的数据绑定到同一个数据源或计算属性。当一个表格的数据发生变化时,另一个表格会自动更新。例如: data()…

vue中如何实现循环

vue中如何实现循环

循环渲染列表数据 在Vue中,使用v-for指令实现循环渲染。基本语法为v-for="(item, index) in items",其中items是数据源数组,item是当前遍历的元素,index是…

权限管理vue如何实现

权限管理vue如何实现

基于路由的权限控制 在Vue中可以通过路由守卫实现页面级权限控制。定义路由时添加meta字段标记权限角色: const routes = [ { path: '/admin',…

vue如何实现

vue如何实现

Vue 实现方法 Vue 提供了多种方式来实现功能,具体取决于需求。以下是一些常见场景的实现方法: 数据绑定 使用 v-model 指令实现双向数据绑定,适用于表单输入元素。在组件中可以通过 pro…