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与javascript的两种交互方式
Oct 09 PHP
PHP详解ASCII码对照表与字符转换
Dec 05 PHP
如何使用php判断服务器是否是HTTPS连接
Jul 05 PHP
ThinkPHP实现跨模块调用操作方法概述
Jun 20 PHP
destoon出现验证码不显示时的紧急处理方法
Aug 22 PHP
PHP中iconv函数知识汇总
Jul 02 PHP
PHP数学运算与数据处理实例分析
Apr 01 PHP
PHP微信开发之有道翻译
Jun 23 PHP
Ajax实现对静态页面的文章访问统计功能示例
Oct 10 PHP
PHP重置数组为连续数字索引的几种方式总结
Mar 12 PHP
php微信公众号开发之关键词回复
Oct 20 PHP
PHP+Apache实现二级域名之间共享cookie的方法
Jul 24 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输出控制功能在简繁体转换中的应用
2006/10/09 PHP
简单介绍下 PHP5 中引入的 MYSQLI的用途
2007/03/19 PHP
黑夜路人出的几道php笔试题
2009/08/04 PHP
项目中应用Redis+Php的场景
2016/05/22 PHP
Thinkphp5.0自动生成模块及目录的方法详解
2017/04/17 PHP
Laravel框架实现定时发布任务的方法
2018/08/16 PHP
javascript客户端解决方案 缓存提供程序
2010/07/14 Javascript
js String对象中常用方法小结(字符串操作)
2012/01/27 Javascript
JS获取文本框,下拉框,单选框的值的简单实例
2014/02/26 Javascript
window resize和scroll事件的基本优化思路
2014/04/29 Javascript
jquery获取当前元素索引值用法实例
2015/06/10 Javascript
jQuery实现简单的文件上传进度条效果
2020/03/26 Javascript
基于React实现表单数据的添加和删除详解
2017/03/14 Javascript
ES6新特性之Symbol类型用法分析
2017/03/31 Javascript
从零开始搭建webpack+react开发环境的详细步骤
2018/05/18 Javascript
微信小程序 MinUI组件库系列之badge徽章组件示例
2018/08/20 Javascript
layui使用及简单的三级联动实现教程
2020/12/01 Javascript
vue.js watch经常失效的场景与解决方案
2021/01/07 Vue.js
Python开发中爬虫使用代理proxy抓取网页的方法示例
2017/09/26 Python
pytorch cnn 识别手写的字实现自建图片数据
2018/05/20 Python
Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算
2018/12/28 Python
PyQt5实现简单数据标注工具
2019/03/18 Python
Django ImageFiled上传照片并显示的方法
2019/07/28 Python
python如何从文件读取数据及解析
2019/09/19 Python
Pytorch to(device)用法
2020/01/08 Python
Python : turtle色彩控制实例详解
2020/01/19 Python
Python对称的二叉树多种思路实现方法
2020/02/28 Python
Python正则表达式学习小例子
2020/03/03 Python
python删除文件、清空目录的实现方法
2020/09/23 Python
如何解决python多种版本冲突问题
2020/10/13 Python
西铁城美国官方网站:Citizen Watch美国
2019/11/08 全球购物
继电保护工岗位职责
2014/01/05 职场文书
毕业实习自我鉴定范文2014
2014/09/26 职场文书
2015年社区重阳节活动总结
2015/07/30 职场文书
谢师宴学生答谢词
2015/09/30 职场文书
《百分数的认识》教学反思
2016/02/19 职场文书