当前位置:首页 > PHP

php实现动态验证码

2026-02-27 20:38:56PHP

实现动态验证码的步骤

生成验证码图片

使用GD库创建验证码图片,设置背景色、文字颜色和干扰元素。

// 创建画布
$width = 120;
$height = 40;
$image = imagecreatetruecolor($width, $height);

// 设置背景色和文字颜色
$bgColor = imagecolorallocate($image, 240, 240, 240);
$textColor = imagecolorallocate($image, 0, 0, 0);

// 填充背景
imagefilledrectangle($image, 0, 0, $width, $height, $bgColor);

// 生成随机验证码
$code = substr(md5(uniqid()), 0, 6);
$_SESSION['captcha'] = $code;

// 绘制验证码文字
imagestring($image, 5, 30, 12, $code, $textColor);

// 添加干扰线
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: image/png');
imagepng($image);
imagedestroy($image);

创建验证码显示页面

创建一个PHP文件专门输出验证码图片,例如captcha.php。

在HTML中调用验证码

在表单页面中通过img标签引用验证码生成脚本。

<img src="captcha.php" onclick="this.src='captcha.php?'+Math.random()" style="cursor:pointer" title="点击刷新验证码">
<input type="text" name="captcha" placeholder="请输入验证码">

验证用户输入

在表单处理页面验证用户输入的验证码是否正确。

session_start();
if ($_POST['captcha'] !== $_SESSION['captcha']) {
    die('验证码错误');
}

增加安全性措施

验证码应设置有效期,通常为5-10分钟。

$_SESSION['captcha_time'] = time();
// 验证时检查时间
if (time() - $_SESSION['captcha_time'] > 600) {
    die('验证码已过期');
}

提高验证码复杂度

可以使用随机字体、扭曲变形或彩色文字增强安全性。

// 使用TrueType字体
$font = 'arial.ttf';
imagettftext($image, 20, rand(-10, 10), 20, 30, $textColor, $font, $code);

// 扭曲变形
imagefilter($image, IMG_FILTER_WAVE, rand(1, 5), rand(10, 50));

防止暴力破解

限制验证码尝试次数,超过次数后锁定或要求重新获取验证码。

php实现动态验证码

if (!isset($_SESSION['attempts'])) {
    $_SESSION['attempts'] = 0;
}
$_SESSION['attempts']++;
if ($_SESSION['attempts'] > 3) {
    die('尝试次数过多,请刷新验证码');
}

标签: 验证码动态
分享给朋友:

相关文章

php 实现验证码

php 实现验证码

使用 PHP 生成验证码 验证码(CAPTCHA)用于防止自动化脚本提交表单,以下是几种常见的 PHP 实现方法。 使用 GD 库生成图片验证码 GD 库是 PHP 的图像处理扩展,可用于生成验证码…

js验证码的实现

js验证码的实现

验证码的基本实现原理 验证码(CAPTCHA)的核心目标是区分人类用户和自动化程序。JavaScript可用于生成或验证客户端验证码,但需注意纯前端验证可能被绕过,通常需结合后端验证。 纯前端验证码…

jquery 验证码

jquery 验证码

jQuery 验证码实现方法 使用 jQuery 实现验证码功能可以通过多种方式完成,包括生成图形验证码、短信验证码或简单的逻辑验证码。以下是几种常见的实现方法: 图形验证码生成 图形验证码通常结合…

vue 实现动态菜单

vue 实现动态菜单

动态菜单的实现思路 在Vue中实现动态菜单通常涉及从后端API获取菜单数据,根据用户权限或角色动态渲染菜单项。核心思路是将菜单数据与组件分离,通过数据驱动视图。 数据准备与API交互 创建菜单数据模…

vue实现动态表头

vue实现动态表头

实现动态表头的方案 在Vue中实现动态表头通常需要结合数据驱动和组件化思想。以下是几种常见方法: 基于v-for渲染表头 通过v-for指令循环渲染表头列,数据源可以是数组或对象: <tem…

vue动态布局怎么实现

vue动态布局怎么实现

Vue动态布局的实现方法 Vue中实现动态布局通常涉及响应式设计、组件化开发和状态管理。以下是几种常见方法: 使用CSS Grid或Flexbox结合响应式设计 通过CSS Grid或Flexbo…