PHP实现数字运算验证码的方法

Dylan
Dylan
发布时间:2026-10-14 | 4人浏览过
原创

本文讲述如何使用 PHP 的 GD 图像处理函数库编写一个数字运算验证码。该功能主要包含两个随机数和一个加减符号,用户需计算结果才能通过验证。

效果与准备

生成的验证码包含两个 1 到 99 之间的整数,以及加号或减号,以 “?” 结尾。这种形式常用于基础的反自动化攻击。确保你的服务器环境已启用 GD 扩展。

核心代码实现

以下代码定义了 getValidate 函数用于绘制图形,以及 getRand 辅助函数用于生成运算符号。

<?php
getValidate(100, 30);
 
function getValidate($w, $h) {
 // 创建真彩图像 (此处实例为基于调色板的 imagecreate)
 $img = imagecreate($w, $h);
 
 // 定义颜色
 $gray = imagecolorallocate($img, 255, 255, 255);
 $black = imagecolorallocate($img, rand(0, 200), rand(0, 200), rand(0, 200));
 $red = imagecolorallocate($img, 255, 0, 0);
 $white = imagecolorallocate($img, 255, 255, 255);
 $green = imagecolorallocate($img, 0, 255, 0);
 $blue = imagecolorallocate($img, 0, 0, 255);
 
 // 填充背景矩形
 imagefilledrectangle($img, 0, 0, $w, $h, $black);
 
 // 添加 80 个噪点像素以增加识别难度
 for ($i = 0; $i < 80; $i++) {
   imagesetpixel($img, rand(0, $w), rand(0, $h), $gray);
 }
 
 // 生成两个随机数字
 $num1 = rand(1, 99);
 $num2 = rand(1, 99);
 
 // 在指定位置绘制数字和字符
 // 字体大小: 5, x坐标, y坐标(基准线), 内容, 颜色
 imagestring($img, 5, 5, rand(1, 10), $num1, $red);
 imagestring($img, 5, 30, rand(1, 10), getRand(), $white);
 imagestring($img, 5, 45, rand(1, 10), $num2, $green);
 imagestring($img, 5, 65, rand(1, 10), "=", $blue);
 imagestring($img, 5, 80, rand(1, 10), "?", $red);
 
 // 设置 HTTP 头并以 PNG 格式输出
 header("Content-Type: image/png");
 imagepng($img);
 imagedestroy($img);
}

// 辅助函数:随机返回 + 或 -
function getRand() {
 $code = rand(0, 1);
 if ($code === 0) {
   return "+";
 } else {
   return "-";
 }
}
?>

运行说明

  1. 调用方法:将上述代码保存为 validate.php。由于脚本直接输出二进制数据(图像流),直接访问该文件即可看到验证码图片。
  2. 安全提示:此示例未涉及验证码内容的存储(如 Session),仅为视觉生成代码。在实际应用中,请确保后端正确校验了用户的计算结果。

以上就是 PHP 数字运算验证码实现的详细内容,更多关于 PHP GD 库验证码的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表