0

0

PHP如何生成简单数字验证码_PHP生成数字验证码方法【代码】

絕刀狂花

絕刀狂花

发布时间:2025-12-24 21:19:02

|

757人浏览过

|

来源于php中文网

原创

PHP数字验证码有四种实现方式:一、GD库生成PNG图片;二、base64内联SVG字符串;三、GD加干扰线增强安全;四、API接口返回JSON数据供前端动态显示。

php如何生成简单数字验证码_php生成数字验证码方法【代码】

如果您需要在PHP项目中实现用户登录或注册时的简单数字验证码功能,则可以通过生成随机数字并将其绘制为图片来完成。以下是几种不同的实现方法:

一、使用GD库生成纯数字验证码图片

该方法利用PHP内置的GD图像处理扩展,创建一个背景色可调、字体大小适中的PNG格式验证码图片,并将四位纯数字写入其中。验证码数字同时存储于session中供后续校验。

1、开启session并生成4位随机数字:
session_start();
$code = str_pad(rand(0, 9999), 4, '0', STR_PAD_LEFT);
$_SESSION['captcha'] = $code;

2、创建200×60像素的画布:
$image = imagecreate(200, 60);
$bg = imagecolorallocate($image, 240, 240, 240);

立即学习PHP免费学习笔记(深入)”;

3、分配文字颜色并写入数字:
$text_color = imagecolorallocate($image, 50, 50, 50);
imagestring($image, 5, 50, 20, $code, $text_color);

4、输出PNG图片头信息并显示:
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);

二、不依赖GD库的base64内联验证码字符串方案

该方法避开图像生成,直接生成可嵌入HTML img标签的base64编码数字字符串,适用于无GD扩展环境或需快速部署的轻量场景。

1、生成4位数字并转换为base64字符串:
$code = str_pad(rand(0, 9999), 4, '0', STR_PAD_LEFT);
$_SESSION['captcha'] = $code;
$text = "数字:" . $code;
$base64 = 'data:image/svg+xml;base64,' . base64_encode('' . htmlspecialchars($text) . '');

2、在HTML中直接使用该base64字符串:
PHP如何生成简单数字验证码_PHP生成数字验证码方法【代码】' . $base64 . '" alt="验证码">

三、使用字符干扰线增强基础数字验证码安全性

在GD绘图基础上添加随机线条和噪点,提升OCR识别难度,但保持数字清晰可读,适用于对基础防爬有要求的表单验证场景。

1、创建画布并设定背景色:
$image = imagecreate(200, 60);
$bg = imagecolorallocate($image, 255, 255, 255);

2、生成并写入4位数字:
$code = str_pad(rand(0, 9999), 4, '0', STR_PAD_LEFT);
$_SESSION['captcha'] = $code;
$text_color = imagecolorallocate($image, 0, 0, 0);
imagestring($image, 5, 45, 20, $code, $text_color);

3、绘制5条随机位置干扰线:
for ($i = 0; $i   $x1 = rand(0, 200); $y1 = rand(0, 60);
  $x2 = rand(0, 200); $y2 = rand(0, 60);
  $line_color = imagecolorallocate($image, rand(180, 220), rand(180, 220), rand(180, 220));
  imageline($image, $x1, $y1, $x2, $y2, $line_color);
}

4、输出图片:
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);

四、基于Session+AJAX的前后端分离验证码校验流程

该方案将验证码生成与校验逻辑解耦,前端通过AJAX请求获取验证码值(非图片),后端将数字存入session并返回JSON响应,适用于Vue/React等单页应用集成。

1、创建captcha_api.php文件,输出JSON格式验证码:
session_start();
$code = str_pad(rand(0, 9999), 4, '0', STR_PAD_LEFT);
$_SESSION['captcha'] = $code;
header('Content-Type: application/json');
echo json_encode(['code' => $code]);

2、前端JavaScript发起GET请求获取验证码:
fetch('captcha_api.php')
  .then(r => r.json())
  .then(data => {
    document.getElementById('captcha-display').textContent = '' + data.code + '';
  });

3、表单提交时携带该数字至校验接口:
const input = document.getElementById('user_captcha').value;
if (input === document.getElementById('captcha-display').textContent) {
  // 允许提交
}

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

1645

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1085

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

985

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

948

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1396

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1227

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1437

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1302

2023.11.13

苹果官网入口直接访问
苹果官网入口直接访问

苹果官网直接访问入口是https://www.apple.com/cn/,该页面具备0.8秒首屏渲染、HTTP/3与Brotli加速、WebP+AVIF双格式图片、免登录浏览全参数等特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

10

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 7.7万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 6.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号