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写MySQL数据 实现代码
Jun 15 PHP
PHP 创建标签云函数代码
May 26 PHP
解析PHP获取当前网址及域名的实现代码
Jun 23 PHP
php通过隐藏表单控件获取到前两个页面的url
Sep 09 PHP
php之curl设置超时实例
Nov 03 PHP
解决nginx不支持thinkphp中pathinfo的问题
Jul 21 PHP
PHP类的封装与继承详解
Sep 29 PHP
php简单实现短网址(短链)还原的方法(测试可用)
May 09 PHP
php字符串操作常见问题小结
Oct 11 PHP
php array_values 返回数组的所有值详解及实例
Nov 12 PHP
PHP实现的一致性Hash算法详解【分布式算法】
Mar 31 PHP
laravel实现按时间日期进行分组统计方法示例
Mar 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实现微信公众平台账号自定义菜单类
2014/12/02 PHP
php抓取并保存网站图片的实现代码
2015/10/28 PHP
让你的PHP7更快之Hugepage用法分析
2016/05/31 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
PHP设计模式之适配器模式原理与用法分析
2018/04/25 PHP
laravel 错误处理,接口错误返回json代码
2019/10/25 PHP
javascript 年月日联动实现核心代码
2009/12/21 Javascript
jquery.jstree 增加节点的双击事件代码
2010/07/27 Javascript
jQuery 选择表格(table)里的行和列及改变简单样式
2012/12/15 Javascript
对jQuery的事件绑定的一些思考(补充)
2013/04/20 Javascript
javascript完美拖拽的实现方法
2013/09/29 Javascript
使用jQuery和PHP实现类似360功能开关效果
2014/02/12 Javascript
js识别uc浏览器的代码
2015/11/06 Javascript
分享有关jQuery中animate、slide、fade等动画的连续触发、滞后反复执行的bug
2016/01/10 Javascript
Nodejs基于LRU算法实现的缓存处理操作示例
2017/03/17 NodeJs
ES6新特性七:数组的扩充详解
2017/04/21 Javascript
jQuery Easyui Treegrid实现显示checkbox功能
2017/08/08 jQuery
[02:03]永远的信仰DOTA2 中国军团历届国际邀请赛回顾
2016/06/26 DOTA
Python字典操作简明总结
2015/04/13 Python
浅谈Python中函数的参数传递
2016/06/21 Python
python中实现迭代器(iterator)的方法示例
2017/01/19 Python
python高级特性和高阶函数及使用详解
2018/10/17 Python
在Pandas中给多层索引降级的方法
2018/11/16 Python
英国领先的在线高尔夫设备零售商:Golfgeardirect
2020/12/11 全球购物
瑞典多品牌连锁店:Johnells
2021/01/13 全球购物
JAVA高级程序员面试题
2013/09/06 面试题
高校学生干部的自我评价分享
2013/11/04 职场文书
作风转变年心得体会
2014/10/22 职场文书
门市房租房协议书
2014/12/04 职场文书
上市公司董事长岗位职责
2015/04/16 职场文书
爱护环境卫生倡议书
2015/04/29 职场文书
工作年限证明范本
2015/06/15 职场文书
六五普法学习心得体会
2016/01/21 职场文书
导游词之山东八仙过海景区
2019/11/11 职场文书
Linux中Nginx的防盗链和优化的实现代码
2021/06/20 Servers
Win11安装受阻怎么办? Windows11安装问题与解决方案汇总
2021/11/21 数码科技