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 分页分组类
Dec 10 PHP
解析如何在PHP下载文件名中解决乱码的问题
Jun 20 PHP
九个你必须知道而且又很好用的php函数和特点
Aug 08 PHP
php计算数组不为空元素个数的方法
Jan 27 PHP
php json转换成数组形式代码分享
Nov 10 PHP
PHP中一些可以替代正则表达式函数的字符串操作函数
Nov 17 PHP
php实现parent调用父类的构造方法与被覆写的方法
Feb 11 PHP
php中二分法查找算法实例分析
Sep 22 PHP
PHP实现二维数组根据key进行排序的方法
Dec 30 PHP
PHP实现常用排序算法的方法
Feb 05 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
Apr 05 PHP
PHP实现简单日历类编写
Aug 28 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 ss7.5的数据调用 (笔记)
2010/03/08 PHP
php生成随机字符串可指定纯数字、纯字母或者混合的
2014/04/18 PHP
php CI框架插入一条或多条sql记录示例
2014/07/29 PHP
php检查字符串中是否包含7位GSM字符的方法
2015/03/17 PHP
PHP-FPM之Chroot执行环境详解
2015/08/03 PHP
CI框架源码解读之URI.php中_fetch_uri_string()函数用法分析
2016/05/18 PHP
PHP AjaxForm提交图片上传并显示图片源码
2016/11/29 PHP
thinkphp项目如何自定义微信分享描述内容
2017/02/20 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
2017/04/07 PHP
用js生产批量批处理执行命令
2008/07/28 Javascript
javascript禁制后退键(Backspace)实例代码
2013/11/15 Javascript
jQuery多个版本和其他js库冲突的解决方法
2016/08/11 Javascript
原生JS实现Ajax跨域请求flask响应内容
2017/10/24 Javascript
vue的keep-alive用法技巧
2019/08/15 Javascript
JS实现简易留言板(节点操作)
2020/03/16 Javascript
Vue双向绑定实现原理与方法详解
2020/05/07 Javascript
[01:12:35]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
python检测某个变量是否有定义的方法
2015/05/20 Python
总结网络IO模型与select模型的Python实例讲解
2016/06/27 Python
用Python设计一个经典小游戏
2017/05/15 Python
通过pykafka接收Kafka消息队列的方法
2018/12/27 Python
对python多线程SSH登录并发脚本详解
2019/02/14 Python
python中嵌套函数的实操步骤
2019/02/27 Python
如何安装并使用conda指令管理python环境
2019/07/10 Python
Python爬虫学习之翻译小程序
2019/07/30 Python
对tensorflow中的strides参数使用详解
2020/01/04 Python
python实现发送邮件
2021/03/02 Python
HTML+CSS3 模仿Windows7 桌面效果
2010/06/17 HTML / CSS
adidas爱尔兰官方网站:阿迪达斯运动鞋和运动服
2019/11/01 全球购物
当文件系统受到破坏时,如何检查和修复系统?
2012/03/09 面试题
全国优秀辅导员事迹材料
2014/05/14 职场文书
2014年项目工作总结
2014/11/24 职场文书
司机个人年终总结
2015/03/03 职场文书
理想国读书笔记
2015/06/25 职场文书
导游词之山海关
2019/12/10 职场文书
详解vue中v-for的key唯一性
2021/05/15 Vue.js