验证码的作用是防止机器人或自动化脚本进行恶意操作,比如刷评论、暴力破解密码等。1. 使用gd库生成英文数字验证码的基本步骤包括:创建画布、设置背景色和干扰元素、随机生成字符、将字符绘制到图片上、输出图片并销毁资源;2. 生成中文验证码的关键点在于准备中文字体文件并使用imagettftext函数代替imagestring函数,从指定中文字符集中随机选取字符;3. 验证码的前后端配合验证逻辑是用户提交表单时输入验证码,后端从session取出存储值进行比对。总结来说,英文验证码直接用内置函数绘图,中文需字体文件和特定函数,都要加干扰元素,且用session存储验证码用于验证。

验证码的作用是防止机器人或自动化脚本进行恶意操作,比如刷评论、暴力破解密码等。PHP作为常用的后端语言之一,生成验证码并不复杂,尤其是中文验证码,虽然用得少一些,但也有特定场景的需求。

下面讲讲怎么用PHP来生成验证码,包括英文数字和中文两种类型的基本实现方式。

这是最常见也最容易上手的验证码生成方法,核心是使用 PHP 的 GD 图像处理扩展。
立即学习“PHP免费学习笔记(深入)”;
基本步骤如下:

<?php
session_start();
header('Content-Type: image/png');
$width = 120;
$height = 40;
$image = imagecreatetruecolor($width, $height);
$bgColor = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $bgColor);
$code = '';
$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
for ($i = 0; $i < 4; $i++) {
$code .= $chars[rand(0, strlen($chars) - 1)];
}
$_SESSION['captcha'] = $code;
$textColor = imagecolorallocate($image, 0, 0, 0);
imagestring($image, 5, 30, 10, $code, $textColor);
// 加点干扰线或点
for ($i = 0; $i < 5; $i++) {
imageline($image, rand(0, $width), rand(0, $height), rand(0, $width), rand(0, $height), imagecolorallocate($image, 150, 150, 150));
}
imagepng($image);
imagedestroy($image);这段代码可以保存为 captcha.php,然后在网页中通过 <img src="captcha.php"> 调用。
英文字符可以用内置函数直接绘制,但中文字符必须依赖 TrueType 字体文件(.ttf),否则会乱码或者无法显示。
关键点:
imagettftext() 函数代替 imagestring()
<?php
session_start();
header('Content-Type: image/png');
$width = 150;
$height = 50;
$image = imagecreatetruecolor($width, $height);
$bgColor = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $bgColor);
// 常见中文字符集
$chineseChars = '你好世界欢迎测试验证码功能';
$code = '';
for ($i = 0; $i < 4; $i++) {
$code .= $chineseChars[rand(0, mb_strlen($chineseChars, 'UTF-8') - 1)];
}
$_SESSION['captcha'] = $code;
$fontFile = 'simsun.ttc'; // 确保字体文件路径正确
$fontSize = 20;
$textColor = imagecolorallocate($image, 0, 0, 0);
// 随机位置绘制每个字
$x = 20;
for ($i = 0; $i < strlen($code); $i++) {
$char = mb_substr($code, $i, 1, 'UTF-8');
imagettftext($image, $fontSize, 0, $x, 30, $textColor, $fontFile, $char);
$x += 30;
}
// 添加干扰线
for ($i = 0; $i < 5; $i++) {
imageline($image, rand(0, $width), rand(0, $height), rand(0, $width), rand(0, $height), imagecolorallocate($image, 150, 150, 150));
}
imagepng($image);
imagedestroy($image);注意:确保服务器上有可用的中文字体文件,并且路径配置正确。如果没有字体文件,可以去网上下载开源字体,比如思源黑体、宋体等。
前端展示验证码图片后,用户输入的内容需要和服务端存储的值进行比对。
流程简述:
示例:
if (strtolower($_POST['user_input']) == strtolower($_SESSION['captcha'])) {
echo '验证码正确';
} else {
echo '验证码错误';
}用 PHP 生成验证码,不管是英文还是中文,其实都不难,关键是掌握几个要点:
基本上就这些,看起来有点多,但一步步来问题不大。
以上就是如何用PHP制作验证码?中文验证码生成方法的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号