PHP图片验证码如何实现?

时间:2023年10月04日

/

来源:网络

/

编辑:佚名

使用 PHP 类来生成验证码的示例:
class Captcha
{
    protected $width = 100; // 验证码宽度
    protected $height = 30; // 验证码高度
    protected $length = 4; // 验证码长度
    protected $font_size = 16; // 验证码字体大小
    public function generate()
    {
        session_start(); // 启动会话
        // 创建图像对象
        $image = imagecreatetruecolor($this->width, $this->height);
        // 设定背景色
        $bg_color = imagecolorallocate($image, 255, 255, 255);
        imagefill($image, 0, 0, $bg_color);
        // 生成验证码字符串
        $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
        $str = '';
        for ($i = 0; $i < $this->length; $i++) {
            $str .= $chars[mt_rand(0, strlen($chars) - 1)];
        }
        // 把验证码字符串存入会话变量
        $_SESSION['captcha'] = $str;
        // 绘制验证码字符串
        $text_color = imagecolorallocate($image, 0, 0, 0);
        for ($i = 0; $i < $this->length; $i++) {
            $x = ($this->width / $this->length) * $i + ($this->width / $this->length - $this->font_size) / 2;
            $y = $this->height / 2 + $this->font_size / 2 - 2;
            imagettftext($image, $this->font_size, mt_rand(-10, 10), $x, $y, $text_color, __DIR__ . '/arial.ttf', $str[$i]);
        }
        // 输出图像
        header('Content-type: image/png');
        imagepng($image);
        // 释放资源
        imagedestroy($image);
    }
    public function validate($value)
    {
        session_start(); // 启动会话
        if (isset($_SESSION['captcha']) && strtolower($_SESSION['captcha']) === strtolower($value)) {
            unset($_SESSION['captcha']);
            return true;
        } else {
            return false;
        }
    }
}
使用示例:
客户端代码:
<!-- 在 HTML 页面中引用验证码图片 -->
<img src="captcha.php" alt="验证码">
<!-- 提交表单时发送验证码字符串 -->
<input type="text" name="captcha">
服务器端代码:
<?php
// 创建验证码对象
$captcha = new Captcha();
// 生成验证码
$captcha->generate();
// 验证提交的验证码
if ($captcha->validate($_POST['captcha'])) {
    echo '验证通过';
} else {
    echo '验证失败';
}
PS:此代码仅为示例,封装可以更加完善,不建议直接用于生产环境。
猜你需要

豫ICP备2021026617号-1  豫公网安备:41172602000185   Copyright © 2021-2028 www.78moban.com/ All Rights Reserved

本站作品均来自互联网,转载目的在于传递更多信息,并不代表本站赞同其观点和对其真实性负责。如有侵犯您的版权,请联系 1565229909#qq.com(把#改成@),我们将立即处理。