php 中怎么生成验证码
时间 : 2023-04-05 06:23:02声明: : 文章内容来自网络,不保证准确性,请自行甄别信息有效性
验证码(Captcha)是指用于区分机器和人类用户的一种技术,通常用于防止自动化的攻击和垃圾信息。在 PHP 中,生成验证码一般使用 GD 库,可以生成数字、字母、数学公式等多种类型的验证码。
下面是一个简单的 PHP 代码示例,用于生成数字和字母混合的验证码:
```php
session_start();
$length = 6; // 验证码长度
$width = 100; // 图片宽度
$height = 40; // 图片高度
// 创建画布
$image = imagecreatetruecolor($width, $height);
// 定义白色背景和黑色文字颜色
$bgColor = imagecolorallocate($image, 255, 255, 255);
$textColor = imagecolorallocate($image, 0, 0, 0);
// 填充背景色
imagefill($image, 0, 0, $bgColor);
// 生成随机字符串
$charset = 'abcdefghkmnpqrstuvwxyz23456789'; // 随机字符串集合(去掉易混淆的字符)
$captcha = ''; // 验证码
for ($i = 0; $i < $length; $i++) {
$captcha .= $charset[mt_rand(0, strlen($charset)-1)];
}
// 把验证码保存到 session
$_SESSION['captcha'] = $captcha;
// 把验证码绘制到画布上
$font = 5; // 字体大小
$x = 10; // 横坐标
$y = $height/2 + $font/2; // 纵坐标
for ($i = 0; $i < $length; $i++) {
$angle = mt_rand(-10, 10); // 字符旋转角度
imagettftext($image, $font, $angle, $x, $y, $textColor, 'fonts/arial.ttf', $captcha[$i]);
$x += $font + mt_rand(0, 5);
}
// 添加噪点
for ($i = 0; $i < 50; $i++) {
$color = imagecolorallocate($image, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
imagesetpixel($image, mt_rand(0, $width-1), mt_rand(0, $height-1), $color);
}
// 添加干扰线
for ($i = 0; $i < 5; $i++) {
$color = imagecolorallocate($image, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
imageline($image, mt_rand(0, $width-1), mt_rand(0, $height-1), mt_rand(0, $width-1), mt_rand(0, $height-1), $color);
}
// 输出图片并销毁图像资源
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
这段代码使用 imagecreatetruecolor 函数创建了一个大小为 $width x $height 的画布,并使用 imagefill 函数填充白色背景色。然后,它使用 imagettftext 函数把随机生成的验证码绘制到画布上,并添加了一些干扰线和噪点。最后,它输出了图片并销毁图像资源。
需要注意的是,上面的代码使用了 PHP 的 Session 机制来保存验证码,因此需要在执行这段代码之前确保会话已经启动或者手动启动会话。同时,为了把中文字符也显示到画布上,需要保证 GD 库已经安装了 FreeType 支持。
在实际应用中,为了增强验证码的安全性和可读性,还可以使用更复杂的字体、调整字体大小、添加更多的干扰元素等技术。
生成验证码是 Web 开发中常用的技术之一,它可以很好地防止机器人或非法用户进行恶意操作。在 PHP 中生成验证码也是非常简单的事情,下面我们来一步步介绍如何生成验证码。
步骤一:创建画布和字体
在 PHP 中生成验证码,首先需要创建一个画布,然后在画布上绘制出验证码文本,并设置字体和字体大小。
```php
// 创建画布
$image = imagecreatetruecolor(100, 30);
// 设置字体和字体大小
$font = './arial.ttf';
$fontSize = 20;
`imagecreatetruecolor()` 函数用于创建一个真彩色图像,默认情况下是黑色背景。还可以使用 `imagefill()` 函数来填充其它颜色的背景。
`$font` 变量用于指定字体文件的位置,这里使用的是 Arial 字体。如果没有安装 Arial 字体,也可以使用系统自带的字体(如宋体、黑体等)。
`$fontSize` 变量用于指定字体大小,这里设置为 20。
步骤二:生成随机字母和数字
在画布上绘制验证码文本之前,需要先生成随机的字母和数字,这里我们使用 `mt_rand()` 函数来生成。
```php
// 随机生成验证码文本
$letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$numbers = '0123456789';
$code = '';
for ($i = 0; $i < 4; $i++) {
$char = '';
$type = mt_rand(0, 1);
if ($type == 0) {
$char = $letters[mt_rand(0, strlen($letters) - 1)];
} else {
$char = $numbers[mt_rand(0, strlen($numbers) - 1)];
}
$code .= $char;
}
`$letters` 和 `$numbers` 变量用于指定可用的字母和数字。这里选择了英文字母和数字,可以根据实际需求进行调整。
使用循环来生成 4 位的验证码,每次循环中先使用 `mt_rand()` 函数随机选择字母或数字,然后再根据随机选择的类型生成对应的字符,并将其添加在验证码文本中。
步骤三:绘制验证码文本
有了随机生成的验证码文本,现在就可以在画布上绘制出来。可以使用 `imagettftext()` 函数或 `imagestring()` 函数来绘制文本。
```php
// 绘制验证码文本
$textColor = imagecolorallocate($image, 255, 255, 255); // 文本颜色为白色
imagettftext($image, $fontSize, 0, 10, 22, $textColor, $font, $code);
`imagecolorallocate()` 函数用于创建文本颜色,这里设置为白色。
`imagettftext()` 函数用于绘制 TrueType 字体的文本,参数分别为:画布对象、字体大小、旋转角度、左上角 x 坐标、左上角 y 坐标、文本颜色、字体文件、验证码文本。
步骤四:输出图像并释放资源
最后一步就是将生成的验证码输出到浏览器,并释放资源。
```php
// 输出图像并释放资源
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
`header()` 函数用来设置 HTTP response header,这里设置输出类型为 PNG 图片类型。
`imagepng()` 函数用于将创建的图像输出到浏览器。
`imagedestroy()` 函数用于释放掉创建的图像资源。
完整的代码如下:
```php
// 创建画布
$image = imagecreatetruecolor(100, 30);
// 设置字体和字体大小
$font = './arial.ttf';
$fontSize = 20;
// 随机生成验证码文本
$letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$numbers = '0123456789';
$code = '';
for ($i = 0; $i < 4; $i++) {
$char = '';
$type = mt_rand(0, 1);
if ($type == 0) {
$char = $letters[mt_rand(0, strlen($letters) - 1)];
} else {
$char = $numbers[mt_rand(0, strlen($numbers) - 1)];
}
$code .= $char;
}
// 绘制验证码文本
$textColor = imagecolorallocate($image, 255, 255, 255); // 文本颜色为白色
imagettftext($image, $fontSize, 0, 10, 22, $textColor, $font, $code);
// 输出图像并释放资源
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
使用以上代码,即可在浏览器中生成随机的 4 位验证码。
上一篇
php的函数怎么返回信息
下一篇
怎么访问虚拟机中php
https/SSL证书广告优选IDC>>
推荐主题模板更多>>
推荐文章