当前位置:首页 > 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()函数随机选取字符组合成验证码。

php如何实现验证码

$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标签动态加载验证码生成脚本,点击图片可刷新验证码。

php如何实现验证码

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

增强安全性措施

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

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

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

分享给朋友:

相关文章

如何实现vue表格联动

如何实现vue表格联动

实现 Vue 表格联动的方法 数据绑定与响应式更新 通过 Vue 的响应式特性,将多个表格的数据绑定到同一个数据源或计算属性。当一个表格的数据发生变化时,另一个表格会自动更新。例如: data()…

vue如何实现拖动

vue如何实现拖动

Vue 实现拖动的常用方法 使用 HTML5 原生拖放 API HTML5 提供了原生的拖放 API,可以通过 draggable 属性和相关事件实现拖动功能。 <template>…

react如何实现录音

react如何实现录音

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

php实现验证码的识别

php实现验证码的识别

验证码识别的基本方法 验证码识别通常分为手动实现和第三方工具两种方式。手动实现需要图像处理和机器学习知识,而第三方工具则更快捷。 使用Tesseract OCR识别验证码 Tesseract是一个开…

java是如何实现跨平台的

java是如何实现跨平台的

Java 跨平台的实现原理 Java 实现跨平台的核心机制基于 “一次编写,到处运行” 的理念,主要通过以下技术实现: 字节码与 JVM Java 源代码编译后生成字节码(.class 文件),而非…

如何实现vue验证

如何实现vue验证

Vue 表单验证的实现方法 Vue 表单验证可以通过多种方式实现,包括内置指令、第三方库和自定义验证逻辑。以下是几种常见的方法: 使用 Vue 内置指令进行基础验证 Vue 提供了 v-model…