当前位置:首页 > PHP

php如何实现验证码

2026-02-28 04:39:21PHP

生成验证码图片

使用PHP的GD库创建图像资源,设置背景色和文字颜色。通过imagecreatetruecolor()函数创建画布,imagefill()填充背景,imagettftext()添加随机字符。

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

添加干扰元素

绘制干扰线和噪点增加识别难度。使用imageline()随机生成线条,imagesetpixel()添加单个像素点。

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

生成随机字符串

创建包含大小写字母和数字的字符池,通过rand()函数随机选取字符组合成验证码。

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

输出图像并存储验证码

将验证码存入Session供后续验证,使用imagepng()输出图像后销毁资源。

session_start();
$_SESSION['captcha'] = $code;
header('Content-type: image/png');
imagepng($image);
imagedestroy($image);

前端调用验证码

在HTML表单中通过img标签动态加载验证码生成脚本,点击图片可刷新验证码。

<img src="captcha.php" onclick="this.src='captcha.php?t='+Math.random()">
<input type="text" name="captcha" required>

验证用户输入

提交表单时比对Session存储的验证码与用户输入,注意处理大小写敏感问题。

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

增强安全性措施

建议实施的额外安全措施:

php如何实现验证码

  • 设置验证码有效期(如5分钟过期)
  • 限制验证码尝试次数
  • 使用更复杂的扭曲变形字体
  • 考虑加入数学公式验证等动态验证方式

对于高安全需求场景,可考虑使用第三方验证码服务如reCAPTCHA。

分享给朋友:

相关文章

vue如何实现目录组件

vue如何实现目录组件

Vue 目录组件实现方法 基于递归组件实现树形目录 递归组件适合处理嵌套层级不确定的目录结构。创建一个可自调用的组件,通过 v-for 遍历子节点并递归渲染自身。 <template>…

vue底层如何实现

vue底层如何实现

Vue 底层的核心实现机制 Vue 的底层实现主要围绕响应式系统、虚拟 DOM 和组件化架构展开。以下是关键技术的详细解析: 响应式系统 依赖追踪与发布订阅模式 通过 Object.definePr…

php实现验证码

php实现验证码

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

vue如何实现uuid

vue如何实现uuid

生成 UUID 的方法 在 Vue 中生成 UUID 可以通过第三方库或原生 JavaScript 实现。以下是几种常见方法: 使用 uuid 库 安装 uuid 库: npm install u…

vue如何实现跳转

vue如何实现跳转

Vue 实现页面跳转的方法 在 Vue 中实现页面跳转可以通过以下几种方式,具体取决于项目结构和需求。 使用 router-link 组件 router-link 是 Vue Router 提供的组…

vue如何实现数据

vue如何实现数据

Vue 数据实现方式 Vue 提供了多种方式实现数据管理和响应式更新,核心机制基于响应式系统和状态管理方案。 响应式数据声明 在组件选项中使用 data 函数返回对象,Vue 会自动递归转换属性为响…