PHP实现简单汉字验证码


Posted in PHP onJuly 28, 2015

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

创建背景画布

$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进行验证了。

以上所述就是本文的全部内容了,希望大家能够喜欢。

PHP 相关文章推荐
PHP个人网站架设连环讲(一)
Oct 09 PHP
PHP中VC6、VC9、TS、NTS版本的区别与用法详解
Oct 26 PHP
PHP数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)
Jul 05 PHP
ThinkPHP 3.2 数据分页代码分享
Oct 14 PHP
smarty表格换行实例
Dec 15 PHP
php筛选不存在的图片资源
Apr 28 PHP
php图片水印添加、压缩、剪切的封装类实现
Apr 18 PHP
php中array_column函数简单实现方法
Jul 11 PHP
PHP定时任务获取微信access_token的方法
Oct 10 PHP
LNMP部署laravel以及xhprof安装使用教程
Sep 14 PHP
PHP自定义序列化接口Serializable用法分析
Dec 29 PHP
Centos7安装swoole扩展操作示例
Mar 26 PHP
PHP代码实现表单数据验证类
Jul 28 #PHP
在Mac上编译安装PHP7的开发环境
Jul 28 #PHP
详谈PHP编码转换问题
Jul 28 #PHP
php技术实现加载字体并保存成图片
Jul 27 #PHP
php实现向javascript传递数组的方法
Jul 27 #PHP
ThinkPHP模型详解
Jul 27 #PHP
ThinkPHP控制器详解
Jul 27 #PHP
You might like
PHP中的CMS的涵义
2007/03/11 PHP
JS 网站性能优化笔记
2011/05/24 PHP
关于PHP中Session文件过多的问题及session文件保存位置
2016/03/17 PHP
centos 7.2下搭建LNMP环境教程
2016/11/20 PHP
laravel 中如何使用ajax和vue总结
2017/08/16 PHP
PHP SPL 被遗落的宝石【SPL应用浅析】
2018/04/20 PHP
prototype 1.5相关知识及他人笔记
2006/12/16 Javascript
js cookies 常见网页木马挂马代码 24小时只加载一次
2009/04/13 Javascript
javascript 读取xml,写入xml 实现代码
2009/07/10 Javascript
Javascript学习笔记9 prototype封装继承
2010/01/11 Javascript
深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP
2012/01/15 Javascript
javascript延时加载之defer测试
2012/12/28 Javascript
JS事件在IE与FF中的区别详细解析
2013/11/20 Javascript
IE的事件传递-event.cancelBubble示例介绍
2014/01/12 Javascript
javascript制作的简单注册模块表单验证
2015/04/13 Javascript
BootStrap框架个人总结(bootstrap框架、导航条、下拉菜单、轮播广告carousel、栅格系统布局、标签页tabs、模态框、菜单定位)
2016/12/01 Javascript
Bootstrap php制作动态分页标签
2016/12/23 Javascript
JavaScript之json_动力节点Java学院整理
2017/06/29 Javascript
vue cli webpack中使用sass的方法
2018/02/24 Javascript
详解vue中axios的封装
2018/07/18 Javascript
解决angularjs service中依赖注入$scope报错的问题
2018/10/02 Javascript
jQuery实现的简单日历组件定义与用法示例
2018/12/24 jQuery
JS实现返回上一页并刷新页面的方法分析
2019/07/16 Javascript
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
2019/09/11 Javascript
[03:49]显微镜下的DOTA2第十五期—VG登基之路完美团
2014/06/24 DOTA
Python中正则表达式的详细教程
2015/04/30 Python
Python+selenium点击网页上指定坐标的实例
2019/07/05 Python
pycharm配置当鼠标悬停时快速提示方法参数
2019/07/31 Python
python爬虫模块URL管理器模块用法解析
2020/02/03 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
2020/02/14 Python
Moss Bros官网:英国排名第一的西装店
2020/02/26 全球购物
主办会计岗位职责
2014/03/13 职场文书
计算机科学与技术专业求职信
2014/09/03 职场文书
党的群众路线教育实践活动心得体会(乡镇)
2014/11/03 职场文书
求职导师推荐信范文
2015/03/27 职场文书
公司表扬稿范文
2015/05/05 职场文书