当前位置:首页 > PHP

php验证码的实现

2026-02-27 11:43:35PHP

PHP验证码的实现方法

使用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 = substr(str_shuffle($chars), 0, 6);
$_SESSION['captcha'] = $code;

// 添加干扰元素
for ($i = 0; $i < 10; $i++) {
    $color = 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), $color);
}

// 绘制验证码文字
for ($i = 0; $i < 6; $i++) {
    $color = imagecolorallocate($image, rand(0, 100), rand(0, 100), rand(0, 100));
    imagettftext($image, 18, rand(-15, 15), 10 + $i * 20, 30, $color, 'arial.ttf', $code[$i]);
}

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

在HTML表单中使用验证码

<form action="submit.php" method="post">
    <img src="captcha.php" onclick="this.src='captcha.php?'+Math.random()">
    <input type="text" name="captcha" placeholder="输入验证码">
    <button type="submit">提交</button>
</form>

验证用户输入

创建submit.php文件处理验证:

php验证码的实现

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

增强安全性措施

使用更复杂的干扰元素:

// 在captcha.php中添加
for ($i = 0; $i < 100; $i++) {
    $color = imagecolorallocatealpha($image, rand(0, 255), rand(0, 255), rand(0, 255), 70);
    imagesetpixel($image, rand(0, $width), rand(0, $height), $color);
}

使用现代验证码库

考虑使用gregwar/captcha等Composer包:

php验证码的实现

composer require gregwar/captcha

实现代码:

<?php
require 'vendor/autoload.php';
session_start();

$builder = new Gregwar\Captcha\CaptchaBuilder;
$builder->build();
$_SESSION['phrase'] = $builder->getPhrase();

header('Content-type: image/jpeg');
$builder->output();
?>

防止自动化攻击

添加验证码尝试次数限制:

// 在submit.php中
if (!isset($_SESSION['attempts'])) {
    $_SESSION['attempts'] = 0;
}
$_SESSION['attempts']++;
if ($_SESSION['attempts'] > 3) {
    die("尝试次数过多");
}

标签: 验证码php
分享给朋友:

相关文章

php购物车实现

php购物车实现

PHP购物车实现方法 使用PHP实现购物车功能可以通过多种方式完成,以下是几种常见的实现方法: Session存储购物车数据 利用PHP的$_SESSION超全局变量存储购物车数据是最简单的方法。用…

php实现异步

php实现异步

PHP 实现异步的方法 PHP 本身是同步执行的脚本语言,但可以通过以下方法模拟异步操作或实现异步效果: 使用多进程(pcntl_fork) 通过 pcntl_fork 创建子进程实现异步,适用于…

php 实现mvc

php 实现mvc

PHP 实现 MVC 架构的方法 MVC(Model-View-Controller)是一种常见的软件设计模式,用于分离业务逻辑、用户界面和用户输入。以下是 PHP 实现 MVC 架构的关键步骤:…

php实现过程

php实现过程

PHP 实现过程 PHP 是一种广泛使用的服务器端脚本语言,特别适合 Web 开发。以下是 PHP 实现过程的关键步骤和注意事项。 安装与配置 下载并安装 PHP,可以从官方 PHP 网站获取最新版…

php redis 队列实现

php redis 队列实现

PHP Redis 队列实现 Redis 是一个高性能的键值存储系统,常被用作消息队列。以下是使用 PHP 和 Redis 实现队列的几种方法。 安装依赖 确保已安装 PHP Redis 扩展。可以…

php实现异步图片上传

php实现异步图片上传

异步图片上传的实现方法 在PHP中实现异步图片上传通常需要结合前端JavaScript和后端PHP代码。以下是几种常见的方法: 使用XMLHttpRequest或Fetch API 前端使用Java…