当前位置:首页 > 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

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

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中的验证码:

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

表单页调用方式:

php验证码如何实现

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

分享给朋友:

相关文章

vue如何实现到期提醒

vue如何实现到期提醒

实现思路 在Vue中实现到期提醒功能,可以通过计算日期差、定时检查和通知用户三个核心步骤完成。需要结合Vue的响应式特性和JavaScript的日期处理能力。 计算日期差 使用JavaScr…

php如何实现直播

php如何实现直播

实现直播功能的方法 PHP可以通过结合其他技术和工具来实现直播功能。以下是几种常见的方法: 使用流媒体服务器 配置流媒体服务器如Nginx-RTMP、Red5或Wowza。这些服务器支持RTMP协…

vue如何实现截图

vue如何实现截图

Vue 实现截图的方法 在 Vue 中实现截图功能可以通过多种方式完成,以下是几种常见的实现方法: 使用 html2canvas 库 html2canvas 是一个流行的 JavaScript 库,…

react如何实现录音

react如何实现录音

使用React实现录音功能 在React中实现录音功能通常需要借助浏览器的MediaRecorder API。以下是实现步骤: 获取用户麦克风权限 需要请求用户授权访问麦克风设备,使用navigat…

vue如何实现confirm

vue如何实现confirm

Vue 实现 Confirm 弹窗的方法 在 Vue 中实现确认弹窗(Confirm)可以通过多种方式,以下是几种常见的方法: 使用浏览器原生 confirm 最简单的实现方式是直接调用浏览器的原生…

vue如何实现渲染

vue如何实现渲染

Vue 渲染实现方法 Vue 的渲染主要通过模板编译、虚拟 DOM 和响应式系统实现。以下是具体实现方式: 模板编译 Vue 模板会被编译成渲染函数。模板可以写在 .vue 文件的 <temp…