PHP实现数字运算验证码的方法
本文讲述如何使用 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 "-";
}
}
?>
运行说明
- 调用方法:将上述代码保存为
validate.php。由于脚本直接输出二进制数据(图像流),直接访问该文件即可看到验证码图片。 - 安全提示:此示例未涉及验证码内容的存储(如 Session),仅为视觉生成代码。在实际应用中,请确保后端正确校验了用户的计算结果。
以上就是 PHP 数字运算验证码实现的详细内容,更多关于 PHP GD 库验证码的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









