PHP实现简易的汉字验证码的思路

虚舟
• 阅读 3938

现在越来越多的网站都开始使用汉字验证码了,既增加了我们国人的亲切感,同时也增加了机器破解的难度,这里我就简单粗暴的说一下。。。

创建背景画布

$image = imagecreatetruecolor(200, 60);
$background = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $background);

画干扰点

for ($i=0; $i < 300; $i++) { 
    $pixColor = imagecolorallocate($image, rand(150, 240), rand(150, 240), rand(150, 240));
    $pixX = rand(10, 190);
    $pixY = rand(5, 55);
    imagesetpixel($image, $pixX, $pixY, $pixColor);
}

画干扰线

//4条水平线
for ($i=0; $i < 5; $i++) { 
    $lineColor = imagecolorallocate($image, rand(50, 150), rand(50, 150), rand(50, 150));
    $lineX1 = 0;
    $lineX2 = 300;
    $lineY1 = ($i + 1) * 12;
    $lineY2 = ($i + 1) * 12;
    imageline($image, $lineX1, $lineY1, $lineX2, $lineY2, $lineColor);
}

//10条垂直线
for ($i=0; $i < 30; $i++) { 
    $lineColor = imagecolorallocate($image, rand(50, 150), rand(50, 150), rand(50, 150));
    $lineX1 = ($i + 1) * 10;
    $lineX2 = ($i + 1) * 10;
    $lineY1 = 0;
    $lineY2 = 60;
    imageline($image, $lineX1, $lineY1, $lineX2, $lineY2, $lineColor);
}

画汉字

$text = array('栀', '子', '花', '开');
for ($i=0; $i < 4; $i++) {
    $textColor = imagecolorallocate($image, rand(20, 100), rand(20, 100), rand(20, 100));
    $textX = $i * 50 + 10;
    $textY = rand(40, 60);
    imagettftext($image, 30, rand(20, 50), $textX, $textY, $textColor, "/Library/Fonts/华文仿宋.ttf", $text[$i]);
}

这里注意一下,字体文件一定要支持中文的
编码要使用utf-8,gbk的中文记得要转吗【iconv函数可以帮助你】

输出图像

header("Content-Type:image/png");
imagepng($image);

销毁资源

imagedestroy($image);

经过粗略的搞吧搞吧,中文验证码也就显示出来了,当然一般网站使用的时候会有一个汉字库种子,从里面随机取出特定个数的汉字显示,最后就是记录到session进行验证了。

点赞
收藏
评论区
推荐文章
宙哈哈 宙哈哈
2年前
【干货】验证码的常见类型总结
验证码是一种区分用户是计算机和人的公共全自动程序。简单来说,验证码就是验证操作是人还是机器。下面我就总结一下常见的验证码类型都有哪些?
Stella981 Stella981
3年前
PHP代码静态分析工具PHPStan
<blockquote最近发现自己写的PHP代码运行结果总跟自己预想的不一样,排查时发现大多是语法错误,在运行之前错误已经种下。可能是自己粗心大意,或者说<codephpl</code检测太简单,不过的确是有一些语法错误埋藏得太深(毕竟PHP是动态语言),那么有没有办法,在代码代码正式运行之前,把语法错误全找出来呢?</blockquote<p
Stella981 Stella981
3年前
Exceptionless
<divid"cnblogs\_post\_body"class"blogpostbodycnblogsmarkdown"<h1id"exceptionless.netcore开源日志框架"Exceptionless.NetCore开源日志框架</h1<blockquote<p作者:markjiang7m2<b
Stella981 Stella981
3年前
DBeaver笔记
<divclass"markdown\_views"<p公司使用的是PostgreSQL数据库,可以使用pgAdmin或者DBeaver进行连接该数据库。个人更喜欢用DBeaver,因为其界面更加美观,操作也相对简单。对于习惯了eclipse的开发者来说,DBeaver绝对是个不错的选择。</p<blockquote<pDBeaver
Wesley13 Wesley13
3年前
PHP算法之判断是否是质数
<h3质数的定义</h3<blockquote质数又称素数。一个大于1的自然数,除了1和它自身外,不能整除其他自然数的数叫做质数;否则称为合数。</blockquote<h3实现思路</h3<p循环所有可能的备选数字,然后和中间数以下且大于等于2的整数进行整除比较,如果能够被整数,则肯定不是质数,相反,就是质数。</p<h3第一种算
Wesley13 Wesley13
3年前
.Net中验证码图片生成
开发网站或平台系统,登录页面是必不可少的功能,但是现在很多人可以使用工具暴力破解网站密码,为了防止这类非法操作,需要在登录页面添加验证,验证码就是最常用的一种验证方式。我结合了自己的经验和网上的验证码资料,总结一下c验证码开发,直接放代码,文中有注释,可以轻松理解代码意思。功能:实现了打开登陆页面是生成验证码图片以及点击验证码时,刷新验证码功能,验
马尚 马尚
1年前
破解滑动验证码
滑动验证码是一种常见的验证码形式,用于验证用户是否为人类而不是机器。破解滑动验证码是网络爬虫和自动化程序常遇到的挑战之一。在这个示例中,我们将使用深度学习框架TensorFlow来破解滑动验证码。1.下载验证码图片首先,我们需要从验证码网址下载验证码图片。
马尚 马尚
1年前
使用Python识别网页验证码的完整流程
网页验证码是网站常用的一种安全手段,用于验证用户身份或者防止恶意机器人访问。本文将介绍使用Python实现网页验证码识别的完整流程,包括下载验证码图片、预处理图片、调用第三方识别接口、模拟填写表单等步骤,并提供详细的代码示例。1.下载验证码图片首先,使用P
马尚 马尚
1年前
识别汉字验证码的方法与实现
在网络世界中,验证码是一种常见的安全机制,用于防止恶意机器人或自动化程序对网站进行恶意攻击。而汉字验证码作为一种常见形式,具有更高的安全性和可读性,因此被广泛应用于各种网站和应用程序中。本文将介绍一种识别汉字验证码的方法与实现,通过收集数据、预处理图像、提
马尚 马尚
1年前
使用Python和深度学习识别汉字验证码
在本项目中,我们将展示如何使用Python和深度学习技术来识别汉字验证码。汉字验证码通常包含各种汉字字符,这对于传统的图像处理方法来说是一个挑战,但是使用深度学习可以更有效地解决这个问题。首先,我们需要导入所需的库:pythonimportosimport
崇恩圣帝 崇恩圣帝
1年前
识别汉字验证码的方法与实现
识别汉字验证码是一项具有挑战性的任务,因为汉字的复杂性和多样性使得传统的图像识别技术往往难以准确识别。本文将介绍一种基于深度学习的方法来识别汉字验证码,并提供完整的代码示例,让读者能够轻松地运行和测试。1.数据收集与预处理首先,我们需要收集大量的汉字验证码