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
定制404错误页面,并发信给管理员的程序
Oct 09 PHP
linux下为php添加curl扩展的方法
Jul 29 PHP
Smarty模板学习笔记之Smarty简介
May 20 PHP
PHP获取MySql新增记录ID值的3种方法
Jun 24 PHP
php中实现用数组妩媚地生成要执行的sql语句
Jul 10 PHP
PHP查询附近的人及其距离的实现方法
May 11 PHP
thinkphp分页集成实例
Jul 24 PHP
PHP实现的简单对称加密与解密方法实例小结
Aug 28 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
Sep 13 PHP
PHP使用ActiveMQ实现消息队列的方法详解
May 31 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
Apr 23 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 管理系统程序中的后门
2009/08/05 PHP
PHP中使用mktime获取时间戳的一个黑色幽默分析
2012/05/31 PHP
浅谈PHP链表数据结构(单链表)
2016/06/08 PHP
为Plesk PHP7启用Oracle OCI8扩展方法总结
2019/03/29 PHP
用倒置滤镜把div倒置,再把table倒置。
2007/07/31 Javascript
JS代码放在head和body中的区别分析
2011/12/01 Javascript
javascript 文件的同步加载与异步加载实现原理
2012/12/13 Javascript
jQuery实现异步获取json数据的2种方式
2014/08/29 Javascript
jQuery判断对象是否存在的方法
2015/02/05 Javascript
js实现人才网站职位选择功能的方法
2015/08/14 Javascript
精通JavaScript的this关键字
2020/05/28 Javascript
easyui导出excel无法弹出下载框的快速解决方法
2016/11/10 Javascript
vue2.0获取自定义属性的值
2017/03/28 Javascript
利用prop-types第三方库对组件的props中的变量进行类型检测
2017/05/02 Javascript
vue使用ajax获取后台数据进行显示的示例
2018/08/09 Javascript
js中的面向对象之对象常见创建方法详解
2019/12/16 Javascript
jquery实现两个div中的元素相互拖动的方法分析
2020/04/05 jQuery
vue+element-ui JYAdmin后台管理系统模板解析
2020/07/28 Javascript
[00:50]深扒TI7聊天轮盘语音出处6
2017/05/11 DOTA
[09:37]2018DOTA2国际邀请赛寻真——不懈追梦的Team Serenity
2018/08/13 DOTA
[01:02:54]完美世界DOTA2联赛PWL S2 FTD vs GXR 第一场 11.22
2020/11/26 DOTA
web.py在SAE中的Session问题解决方法(使用mysql存储)
2015/06/24 Python
Python中的sort()方法使用基础教程
2017/01/08 Python
Python 带有参数的装饰器实例代码详解
2018/12/06 Python
Python函数的默认参数设计示例详解
2019/12/01 Python
python如何操作mysql
2020/08/17 Python
IE8下CSS3选择器nth-child() 不兼容问题的解决方法
2016/11/16 HTML / CSS
HTML5+CSS3实例 :canvas 模拟实现电子彩票刮刮乐代码
2016/12/30 HTML / CSS
来自世界各地的优质葡萄酒:VineShop24
2018/07/09 全球购物
教师自我评价范例
2013/09/24 职场文书
环境科学专业个人求职的自我评价
2013/11/28 职场文书
羽毛球比赛策划方案
2014/06/13 职场文书
2014年最新党员对照检查材料汇总
2014/09/15 职场文书
前台文员岗位职责
2015/02/04 职场文书
2015年爱牙日活动总结
2015/03/23 职场文书
沂蒙六姐妹观后感
2015/06/08 职场文书