怎么用php做验证码
时间 : 2023-03-26 08:57:01声明: : 文章内容来自网络,不保证准确性,请自行甄别信息有效性

验证码是一种用于验证用户身份的技术,可以有效防止恶意软件和机器人自动化提交信息和攻击网站。在网站注册、登录、评论等场景中广泛应用。

在 PHP 中,我们可以通过 GD 库创建验证码图片来实现验证码的生成。下面是一个简单的验证码生成函数示例:

```php

<?php

session_start();

function generateCaptcha($width, $height, $length) {

// 生成随机验证码

$code = rand(pow(10, $length-1), pow(10, $length)-1);

// 将验证码存入 session

$_SESSION['captcha'] = $code;

// 创建图像资源

$image = imagecreate($width, $height);

// 随机背景色

$bgColor = imagecolorallocate($image, rand(200, 255), rand(200, 255), rand(200, 255));

// 随机字体色

$fontColor = imagecolorallocate($image, rand(0, 50), rand(0, 50), rand(0, 50));

// 添加噪点

for ($i = 0; $i < 50; $i++) {

$x = rand(0, $width);

$y = rand(0, $height);

imagesetpixel($image, $x, $y, $fontColor);

}

// 添加干扰线

for ($i = 0; $i < 5; $i++) {

$x1 = rand(0, $width/2);

$x2 = rand($width/2, $width);

$y1 = rand(0, $height);

$y2 = rand(0, $height);

imageline($image, $x1, $y1, $x2, $y2, $fontColor);

}

// 添加验证码文字

$fontFile = 'arial.ttf';

$fontSize = 30;

$angle = rand(-10, 10);

$x = $width / ($length + 1);

$y = $height / 2 + $fontSize / 2;

for ($i = 0; $i < $length; $i++) {

$char = substr($code, $i, 1);

$x = $width / ($length + 1) * ($i + 1) - $fontSize / 2;

imagettftext($image, $fontSize, $angle, $x, $y, $fontColor, $fontFile, $char);

}

// 输出图像

header('Content-type: image/jpeg');

imagejpeg($image);

imagedestroy($image);

}

// 生成 4 位数字验证码图片

generateCaptcha(150, 50, 4);

上述代码中,首先通过 `session_start()` 开启会话,即可使用 `$_SESSION` 数组保存验证信息。然后定义 `generateCaptcha()` 函数生成验证码图片。函数的参数包括验证码图片的宽、高和长度。函数内部首先通过 `rand()` 函数生成指定长度的随机数字验证码,并将其存入 `$_SESSION['captcha']` 中。然后使用 `imagecreate()` 函数创建名为 `$image` 的图像资源,设置背景色和字体色,并添加高斯噪点和干扰直线。最后使用 `header()` 函数和 `imagejpeg()` 函数输出图像并销毁资源。

使用上述函数,可以通过 URL 地址直接访问验证码图片,如 `http://example.com/generate_captcha.php`。在使用表单提交用户输入信息时,可以将验证码图片显示在表单中,用户输入验证码后后台校验用户输入的验证码和 `$_SESSION['captcha']` 是否一致。如果不一致,则提示用户输入错误,并刷新验证码图片,让用户重新输入。

需要注意的是,验证码图片应该具有一定的抗干扰、易识别、有效期等特点,具体实现还需要根据实际需求进行调整。

验证码是一种防止机器人恶意攻击的技术手段,通常用于用户注册、登录、评论等需要进行身份验证的场景。下面我将介绍如何使用 PHP 生成验证码,并将其集成到网站中。

1. 生成验证码图片

首先,我们需要生成一个图片,用于展示验证码。PHP 提供了 GD 库来操作图片,可以生成验证码、缩略图、水印等效果。以下是一个简单的生成 4 位数字验证码的示例代码:

```php

session_start();

// 生成随机验证码

$randomCode = rand(1000,9999);

// 存储验证码到 session 中,方便用户提交验证

$_SESSION['captcha'] = $randomCode;

// 创建画布

$image = imagecreatetruecolor(100, 40);

// 填充颜色

$bgColor = imagecolorallocate($image, 255, 255, 255);

imagefill($image, 0, 0, $bgColor);

// 画出验证码

$textColor = imagecolorallocate($image, 0, 0, 0);

imagestring($image, 5, 20, 10, $randomCode, $textColor);

// 输出图片

header('Content-Type: image/png');

imagepng($image);

imagedestroy($image);

代码中,我们使用了 `imagecreatetruecolor()` 函数创建了一个 100x40 的画布,然后使用 `imagecolorallocate()` 函数设置了背景色和文字颜色,并使用 `imagefill()` 函数填充了背景色。接着,我们使用 `imagestring()` 函数在画布上写出了生成的验证码。最后,使用 `header()` 函数和 `imagepng()` 函数将画布输出为 PNG 图片格式,并使用 `imagedestroy()` 函数销毁了画布对象。

2. 集成验证码到网站

生成验证码图片后,我们需要将其集成到网站中,让用户可以看到并进行输入。以下是一个简单的集成示例代码:

验证码

代码中,我们在 HTML 表单中添加了一个图片标签,将验证码图片的地址设置为 `captcha.php`。在用户提交表单时,我们将用户输入的验证码与存储在 `$_SESSION['captcha']` 变量中的验证码进行比较,以确保用户输入的是正确的验证码。

3. 防止机器人攻击

为了防止机器人攻击,我们需要对验证码图片进行一些处理,使其难以被自动化程序识别。以下是一些常用的处理方式:

- 添加噪点:在验证码图片中添加一些干扰线、噪点等,使其图像难以被识别。

- 斜体倾斜:将验证码图片倾斜一定角度,使其更难被 OCR 感受到。

- 字符扭曲:将验证码图片中的字符进行扭曲、变形,使其更加难以被识别。

4. 总结

使用 PHP 生成验证码,是一种简单有效的防止机器人攻击的技术手段。通过结合 GD 库、session 等技术,我们可以快速构建一个安全有效的验证码系统,保护网站用户的数据安全。