当前位置:首页 > PHP

php实现动态验证码

2026-01-28 23:34:58PHP

PHP 实现动态验证码的方法

使用 GD 库生成验证码图片

创建画布并生成随机字符串作为验证码内容。通过 GD 库函数绘制干扰线和噪点,输出为图片格式。

<?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 = '';
for ($i = 0; $i < 4; $i++) {
    $code .= $chars[rand(0, strlen($chars) - 1)];
}
$_SESSION['captcha'] = $code;

for ($i = 0; $i < 4; $i++) {
    $color = imagecolorallocate($image, rand(0, 150), rand(0, 150), rand(0, 150));
    imageline($image, rand(0, $width), rand(0, $height), rand(0, $width), rand(0, $height), $color);
}

for ($i = 0; $i < 200; $i++) {
    $color = imagecolorallocate($image, rand(200, 255), rand(200, 255), rand(200, 255));
    imagesetpixel($image, rand(0, $width), rand(0, $height), $color);
}

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

前端调用验证码

在 HTML 页面中通过 img 标签引用验证码生成脚本,点击可刷新验证码。

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

验证用户输入

提交表单时比对用户输入与 session 存储的验证码是否一致。

php实现动态验证码

<?php
session_start();
if ($_POST['captcha'] === $_SESSION['captcha']) {
    echo "验证码正确";
} else {
    echo "验证码错误";
}
unset($_SESSION['captcha']);
?>

增加安全性措施

验证码应设置有效期,通常为 5-10 分钟。生成后立即从 session 删除旧验证码,防止重复使用。

$_SESSION['captcha_time'] = time();
if (time() - $_SESSION['captcha_time'] > 300) {
    unset($_SESSION['captcha']);
}

使用 Composer 包简化实现

对于更复杂的需求,可以考虑使用专业的验证码生成库:

php实现动态验证码

  1. 安装 gregwar/captcha 包:

    composer require gregwar/captcha
  2. 代码示例:

    
    <?php
    require '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的动态组件主要通过<component>标签和is属性实现,其核心原理涉及以下机制: 动态组件基础语法 <component :is="curren…

vue实现动态表单

vue实现动态表单

Vue 动态表单实现方法 使用 v-for 动态渲染表单字段 通过遍历数组动态生成表单项,数据驱动视图变化。表单字段配置可存储在数组中,修改数组即可实现表单动态更新。 <template>…

jquery验证码

jquery验证码

jQuery 验证码实现方法 验证码(CAPTCHA)用于防止自动化脚本提交表单。jQuery 可以与后端结合实现验证码功能。 前端生成和验证 使用 jQuery 生成简单的验证码: // 生成随…

vue实现动态查询

vue实现动态查询

Vue实现动态查询的方法 动态查询在Vue中通常结合输入框和列表渲染实现,核心是监听用户输入并实时过滤数据。以下是几种常见实现方式: 使用计算属性过滤数据 计算属性适合对已有数据进行过滤,依赖响应式…

vue实现动态路由讲解

vue实现动态路由讲解

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

vue实现动态轮播图片

vue实现动态轮播图片

使用 Vue 实现动态轮播图片 安装依赖 确保项目中已安装 Vue 和必要的库如 vue-awesome-swiper 或 swiper。通过以下命令安装: npm install swiper v…