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 相关文章推荐
VML绘图板②脚本--VMLgraph.js、XMLtool.js
Oct 09 PHP
PHP新手上路(五)
Oct 09 PHP
php 用sock技术发送邮件的函数
Jul 21 PHP
PHP中static关键字原理的学习研究分析
Jul 18 PHP
php图片加中文水印实现代码分享
Oct 31 PHP
PHP+Ajax检测用户名或邮件注册时是否已经存在实例教程
Aug 23 PHP
基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
Sep 23 PHP
php 指定范围内多个随机数代码实例
Jul 18 PHP
php实现的生成迷宫与迷宫寻址算法完整实例
Nov 06 PHP
php curl获取到json对象并转成数组array的方法
May 31 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
Sep 10 PHP
PHP设计模式(五)适配器模式Adapter实例详解【结构型】
May 02 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中实现简单的ACL 完结篇
2011/09/07 PHP
php防注入,表单提交值转义的实现详解
2013/06/10 PHP
PHPMailer发送HTML内容、带附件的邮件实例
2014/07/01 PHP
浅谈php中urlencode与rawurlencode的区别
2016/09/05 PHP
5款JavaScript代码压缩工具推荐
2014/07/07 Javascript
JS基于myFocus库实现各种功能的tab选项卡切换效果
2015/09/19 Javascript
Bootstrap媒体对象的实现
2016/05/01 Javascript
关于Javascript回调函数的一个妙用
2016/08/29 Javascript
VUE饿了么树形控件添加增删改功能的示例代码
2017/10/17 Javascript
Layui组件Table绑定行点击事件和获取行数据的方法
2018/08/19 Javascript
vue移动端弹框组件的实例
2018/09/25 Javascript
js实现无缝轮播图效果
2020/03/09 Javascript
react-router-dom 嵌套路由的实现
2020/05/02 Javascript
分享8个JavaScript库可更好地处理本地存储
2020/10/12 Javascript
Vue3.0的优化总结
2020/10/16 Javascript
在Python的Django框架中创建语言文件
2015/07/27 Python
使用sklearn之LabelEncoder将Label标准化的方法
2018/07/11 Python
python脚本执行CMD命令并返回结果的例子
2019/08/14 Python
python实现在多维数组中挑选符合条件的全部元素
2019/11/26 Python
Python写出新冠状病毒确诊人数地图的方法
2020/02/12 Python
Python安装依赖(包)模块方法详解
2020/02/14 Python
Python中os模块功能与用法详解
2020/02/26 Python
OpenCV+Python3.5 简易手势识别的实现
2020/12/21 Python
英国网络托管和域名领导者:Web Hosting UK
2017/10/15 全球购物
Europcar西班牙:全球汽车租赁领域的领导者
2018/09/17 全球购物
2013年入党人员的自我鉴定
2013/10/25 职场文书
单位在职证明范本
2014/01/09 职场文书
小学生演讲稿
2014/01/12 职场文书
领导干部廉政承诺书
2014/03/27 职场文书
关于教师节的广播稿
2014/09/10 职场文书
2016年质量月活动总结报告
2016/04/05 职场文书
导游词之黄帝陵景区
2019/09/16 职场文书
Python爬虫入门案例之回车桌面壁纸网美女图片采集
2021/10/16 Python
Python实现老照片修复之上色小技巧
2021/10/16 Python
搭建zabbix监控以及邮件报警的超级详细教学
2022/07/15 Servers
关于MySQL中explain工具的使用
2023/05/08 MySQL