当前位置:首页 > PHP

php实现获取验证码

2026-02-27 15:04:39PHP

使用GD库生成验证码

在PHP中,GD库是生成验证码图像的常用工具。以下是一个基本实现:

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

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

$_SESSION['captcha'] = $code;

for ($i = 0; $i < strlen($code); $i++) {
    $color = imagecolorallocate($image, rand(0, 150), rand(0, 150), rand(0, 150));
    imagettftext($image, 20, rand(-30, 30), 20 + $i * 25, 30, $color, 'arial.ttf', $code[$i]);
}

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

添加干扰元素增强安全性

为了提高验证码的安全性,可以添加干扰线和干扰点:

// 添加干扰线
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);
}

// 添加干扰点
for ($i = 0; $i < 200; $i++) {
    $color = imagecolorallocate($image, rand(150, 250), rand(150, 250), rand(150, 250));
    imagesetpixel($image, rand(0, $width), rand(0, $height), $color);
}

使用Composer包简化实现

可以使用现成的Composer包如gregwar/captcha简化验证码生成:

php实现获取验证码

安装包:

composer require gregwar/captcha

使用示例:

php实现获取验证码

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

$builder = new Gregwar\Captcha\CaptchaBuilder;
$builder->build();

$_SESSION['captcha'] = $builder->getPhrase();

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

验证码验证逻辑

在表单提交后验证验证码:

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

增加验证码难度

可以通过以下方式增加验证码难度:

// 使用更复杂的字符集
$chars = 'abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789';

// 增加字符数量
$length = 6; // 代替之前的4个字符

// 使用扭曲变形
$builder->setDistortion(true);

注意事项

确保服务器已安装GD库,可通过phpinfo()检查。对于字体文件,确保路径正确或使用系统字体。验证码生成脚本应单独保存为PHP文件,通过img标签引用:

<img src="captcha.php" onclick="this.src='captcha.php?'+Math.random()">

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

相关文章

php实现图片上传

php实现图片上传

实现图片上传的基本步骤 创建HTML表单用于文件上传,表单需设置enctype="multipart/form-data"属性,确保文件数据正确传输。 <form action="uploa…

php实现登录

php实现登录

PHP 登录功能实现 数据库连接与用户表创建 创建一个数据库连接文件 db.php,用于管理数据库连接。MySQL 示例代码如下: <?php $host = 'localhost'; $db…

php实现的进度条

php实现的进度条

PHP 实现的进度条方法 在 PHP 中实现进度条通常可以通过命令行脚本(CLI)或 Web 页面两种方式完成。以下是几种常见的实现方法: 命令行进度条 使用 PHP CLI 实现进度条,可以通过不…

无限分类实现 php

无限分类实现 php

无限分类的实现方法 无限分类通常用于构建多层级结构的数据,如商品分类、部门架构等。以下是几种常见的实现方式: 邻接列表模式(Adjacency List) 邻接列表是最简单的实现方式,通过在每个记录…

php实现短信验证

php实现短信验证

PHP实现短信验证的步骤 选择合适的短信服务提供商 国内常见的短信服务提供商包括阿里云短信、腾讯云短信、云片等。注册账号并获取API密钥和签名模板是第一步。这些平台通常提供详细的开发文档和SDK。…

php 购物车实现session

php 购物车实现session

PHP 购物车实现(基于 Session) 在 PHP 中,使用 Session 实现购物车功能是一种常见方法。Session 可以跨页面存储用户数据,适合临时保存购物车信息。 初始化 Sessio…