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中通过ADO调用Access数据库的方法测试不通过
Dec 31 PHP
实用函数5
Nov 08 PHP
php 模拟get_headers函数的代码示例
Apr 27 PHP
初识PHP
Sep 28 PHP
php rsa加密解密使用详解
Jan 14 PHP
[原创]php逐行读取txt文件写入数组的方法
Jul 02 PHP
php实现网站顶踩功能的完整前端代码
Jul 19 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
Apr 27 PHP
php利用ob_start()清除输出和选择性输出的方法
Jan 18 PHP
PHP+Ajax简单get验证操作示例
Mar 02 PHP
PHP常用header头定义代码示例汇总
Aug 29 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查看session内容的函数
2008/08/27 PHP
php !function_exists(&quot;T7FC56270E7A70FA81A5935B72EACBE29&quot;))代码解密
2011/01/07 PHP
PHP随机数生成代码与使用实例分析
2011/04/08 PHP
Laravel中使用阿里云OSS Composer包分享
2015/02/10 PHP
简单了解PHP编程中数组的指针的使用
2015/11/30 PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
2016/11/25 PHP
JavaScript 快捷键设置实现代码
2009/03/13 Javascript
Jquery练习之表单验证实现代码
2010/12/14 Javascript
javascript实现图片循环渐显播放的方法
2015/02/24 Javascript
JS实现响应鼠标点击动画渐变弹出层效果代码
2016/03/25 Javascript
node.js操作MongoDB的实例详解
2017/10/11 Javascript
jquery的 filter()方法使用教程
2018/03/22 jQuery
jQuery中内容过滤器简单用法示例
2018/03/31 jQuery
微信上传视频文件提示(推荐)
2018/11/22 Javascript
js、jquery实现列表模糊搜索功能过程解析
2020/03/27 jQuery
解决echarts vue数据更新,视图不更新问题(echarts嵌在vue弹框中)
2020/07/20 Javascript
三步搞定:Vue.js调用Android原生操作
2020/09/07 Javascript
Nodejs 数组的队列以及forEach的应用详解
2021/02/25 NodeJs
[02:56]DOTA2亚洲邀请赛 VG出场战队巡礼
2015/02/07 DOTA
python 实现堆排序算法代码
2012/06/05 Python
Python编程之属性和方法实例详解
2015/05/19 Python
python实现自动登录人人网并采集信息的方法
2015/06/28 Python
python中快速进行多个字符替换的方法小结
2016/12/15 Python
浅谈tensorflow1.0 池化层(pooling)和全连接层(dense)
2018/04/27 Python
Python 利用内置set函数对字符串和列表进行去重的方法
2018/06/29 Python
python2 与 python3 实现共存的方法
2018/07/12 Python
python列表使用实现名字管理系统
2019/01/30 Python
python 实现提取某个索引中某个时间段的数据方法
2019/02/01 Python
教你如何编写、保存与运行Python程序的方法
2019/07/12 Python
python实现控制台输出颜色
2021/03/02 Python
苏格兰销售女装、男装和童装的连锁店:M&Co
2018/03/16 全球购物
英国第一的市场和亚马逊替代品:OnBuy
2019/03/16 全球购物
优秀民警事迹材料
2014/01/29 职场文书
团队口号大全
2014/06/06 职场文书
教师群众路线心得体会
2014/11/04 职场文书
企业团队精神心得体会
2016/01/19 职场文书