当前位置:首页 > PHP

php实现动态验证码

2026-02-13 21:43:42PHP

使用 PHP 生成动态验证码

PHP 可以通过 GD 库或 Imagick 扩展生成动态验证码图片,通常包括随机字符、干扰线和噪点以提高安全性。

核心步骤

安装或启用 GD 库(通常 PHP 默认已安装),在 php.ini 中取消注释 extension=gd

php实现动态验证码

创建验证码生成脚本 captcha.php:

<?php
session_start();
$width = 120;
$height = 40;
$image = imagecreatetruecolor($width, $height);
$bgColor = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $bgColor);

$chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789';
$code = '';
$length = 4;
for ($i = 0; $i < $length; $i++) {
    $code .= $chars[rand(0, strlen($chars) - 1)];
}
$_SESSION['captcha'] = $code;

$font = 'path/to/font.ttf'; // 使用真实字体文件路径
for ($i = 0; $i < $length; $i++) {
    $color = imagecolorallocate($image, rand(0, 150), rand(0, 150), rand(0, 150));
    imagettftext($image, rand(18, 22), rand(-30, 30), 20 + $i * 25, 30, $color, $font, $code[$i]);
}

// 添加干扰线
for ($i = 0; $i < 5; $i++) {
    $color = imagecolorallocate($image, rand(100, 200), rand(100, 200), rand(100, 200));
    imageline($image, rand(0, $width), rand(0, $height), rand(0, $width), rand(0, $height), $color);
}

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

前端调用验证码

在 HTML 表单中显示验证码图片并设置自动刷新:

php实现动态验证码

<img src="captcha.php" id="captcha" onclick="refreshCaptcha()">
<input type="text" name="captcha_code" required>
<script>
function refreshCaptcha() {
    document.getElementById('captcha').src = 'captcha.php?' + Math.random();
}
</script>

服务器端验证

表单提交后验证用户输入:

session_start();
if ($_POST['captcha_code'] !== $_SESSION['captcha']) {
    die('验证码错误');
}
// 验证通过后清除session中的验证码
unset($_SESSION['captcha']);

安全增强措施

使用更复杂的字符组合,避免使用易混淆字符(如 0 和 O)。

增加验证码失效时间:

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

考虑添加更多干扰元素,如扭曲变形、背景噪点等。对于更高安全性需求,可以使用 Composer 安装专业验证码库如 "gregwar/captcha"。

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

相关文章

vue 动态组件实现

vue 动态组件实现

vue 动态组件实现 Vue 的动态组件功能允许根据条件或用户交互动态切换不同的组件,主要通过 <component> 标签和 is 属性实现。 基本用法 通过 is 属性绑定组件名或组…

vue实现动态筛选

vue实现动态筛选

Vue实现动态筛选的方法 动态筛选是Vue应用中常见的功能需求,可以通过多种方式实现。以下是几种常用的实现方法: 使用计算属性实现筛选 计算属性是Vue中实现动态筛选的理想选择,它会根据依赖的数据自…

vue实现css动态

vue实现css动态

Vue 实现 CSS 动态化的方法 使用 v-bind:style(对象语法) 通过 Vue 的 v-bind:style 绑定动态样式对象,键为 CSS 属性名,值为动态数据。属性名支持驼峰式或短横…

vue 动态实现联动

vue 动态实现联动

Vue 动态实现联动的方法 数据绑定与监听 在Vue中实现联动效果的核心是利用v-model和watch。通过双向绑定表单元素的值,并在数据变化时触发监听函数更新关联数据。 data() { r…

vue实现动态路由讲解

vue实现动态路由讲解

动态路由的基本概念 动态路由允许根据用户权限、业务需求等条件动态加载路由配置,常用于权限控制或模块化开发。Vue Router 提供了 addRoute 方法实现动态添加路由。 实现动态路由的步骤…

vue实现组件动态复制

vue实现组件动态复制

Vue 实现组件动态复制的方法 使用 v-for 动态渲染组件 通过 v-for 指令可以基于数组数据动态生成多个相同结构的组件。只需在模板中使用 v-for 遍历数据数组,并为每个元素创建组件实例。…