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:此代码仅为示例,封装可以更加完善,不建议直接用于生产环境。
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:此代码仅为示例,封装可以更加完善,不建议直接用于生产环境。
新闻资讯 更多
- 【建站知识】查询nginx日志状态码大于400的请求并打印整行04-03
- 【建站知识】Python中的logger和handler到底是个什么?04-03
- 【建站知识】python3拉勾网爬虫之(您操作太频繁,请稍后访问)04-03
- 【建站知识】xpath 获取meta里的keywords及description的方法04-03
- 【建站知识】python向上取整以50为界04-03
- 【建站知识】scrapy xpath遇见乱码解决04-03
- 【建站知识】scrapy爬取后中文乱码,解决word转为html 时cp1252编码问题04-03
- 【建站知识】scrapy采集—爬取中文乱码,gb2312转为utf-804-03