当前位置:首页 > 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 安装后,可以快速生成验证码图片并验证输入。

php如何实现验证码

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

分享给朋友:

相关文章

vue如何实现默认页面

vue如何实现默认页面

Vue 实现默认页面的方法 在 Vue 项目中,通常需要设置一个默认页面(如首页或登录页)作为用户访问时的初始页面。可以通过路由配置实现。 配置路由默认跳转 在 Vue Router 中,使用 re…

vue项目如何实现

vue项目如何实现

安装Vue.js 通过npm或yarn安装Vue.js。确保Node.js环境已配置完成。 npm install vue # 或 yarn add vue 创建Vue项目 使用Vue CLI工具快…

vue如何实现分离

vue如何实现分离

Vue 实现代码分离的方法 Vue 提供了多种方式实现代码分离,提升项目的可维护性和模块化程度。以下是常见的几种方法: 组件化开发 将功能拆分为独立的 Vue 组件,每个组件包含自己的模板、逻辑和样…

vue如何实现高亮

vue如何实现高亮

实现文本高亮的方法 在Vue中实现文本高亮通常可以通过以下几种方式完成: 使用v-html指令结合字符串替换 通过将需要高亮的文本部分替换为HTML标签(如<span class="highl…

php实现验证码的识别

php实现验证码的识别

验证码识别的基本方法 验证码识别通常分为手动实现和第三方工具两种方式。手动实现需要图像处理和机器学习知识,而第三方工具则更快捷。 使用Tesseract OCR识别验证码 Tesseract是一个开…

react如何实现菜单

react如何实现菜单

使用 React 实现菜单的方法 使用状态管理控制菜单显示/隐藏 通过 useState 管理菜单的展开和收起状态,结合点击事件切换状态。 import { useState } from 'rea…