当前位置:首页 > PHP

php验证码如何实现

2026-02-27 15:01:51PHP

使用GD库生成图像验证码

安装GD库确保PHP环境已启用GD库扩展,可通过phpinfo()检查。若未安装,需在php.ini中取消extension=gd的注释并重启服务。

创建画布与背景色
通过imagecreatetruecolor()创建指定宽高的画布,使用imagecolorallocate()设置背景色和文本颜色:

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

生成随机字符串
使用rand()mt_rand()生成4-6位随机字符,通常包含数字和字母:

$chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789';
$code = substr(str_shuffle($chars), 0, 5);
$_SESSION['captcha'] = $code; // 存储到Session

绘制干扰元素
添加干扰线或噪点增强安全性:

php验证码如何实现

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

输出图像
设置HTTP头并输出PNG格式图像:

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

验证用户输入

表单提交后比对Session中的验证码:

php验证码如何实现

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

使用第三方库(如Gregwar/Captcha)

通过Composer安装简化开发:

composer require gregwar/captcha

生成验证码并嵌入表单:

use Gregwar\Captcha\CaptchaBuilder;
$builder = new CaptchaBuilder;
$builder->build();
$_SESSION['phrase'] = $builder->getPhrase();
echo '<img src="' . $builder->inline() . '" />';

安全性增强措施

  • 限制验证码有效期(如5分钟过期)
  • 禁止同一验证码重复使用
  • 使用扭曲变形字体或动态滤镜(如imagettftext()搭配TTF字体)
  • 前端限制频繁刷新请求

完整示例代码

// captcha.php
session_start();
$image = imagecreatetruecolor(100, 30);
$bg = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $bg);
$text = substr(md5(uniqid()), 0, 5);
$_SESSION['captcha'] = $text;
$color = imagecolorallocate($image, 0, 0, 0);
imagestring($image, 5, 30, 8, $text, $color);
header('Content-type: image/png');
imagepng($image);
imagedestroy($image);

表单页调用方式:

<img src="captcha.php" />
<input type="text" name="captcha" required>

分享给朋友:

相关文章

vue如何实现注册

vue如何实现注册

Vue 注册功能实现步骤 注册功能通常涉及前端表单、数据验证、与后端API交互等环节。以下是基于Vue 3和Element Plus的典型实现方式: 表单设计与数据绑定 使用Vue的v-model实…

如何实现vue表格联动

如何实现vue表格联动

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

php实现验证码

php实现验证码

PHP实现验证码的方法 使用GD库生成验证码 GD库是PHP中处理图像的扩展,可用于生成验证码图片。 <?php session_start(); $width = 120; $height…

vue router如何实现

vue router如何实现

Vue Router 的实现方法 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是实现 Vue Router 的具体方法: 安装 Vue Router…

js验证码实现

js验证码实现

验证码的基本原理 验证码(CAPTCHA)用于区分人类用户和自动化程序。常见类型包括图形验证码、滑动验证码、短信验证码等。JavaScript 可用于前端验证码的生成和验证逻辑。 图形验证码实现 使…

vue如何实现退出

vue如何实现退出

退出登录的实现方法 在Vue中实现退出登录功能通常涉及清除用户凭证、重置应用状态并跳转到登录页。以下是具体实现方式: 清除本地存储的Token 使用localStorage或sessionStora…