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 28 PHP
PHP教程之PHP中shell脚本的使用方法分享
Feb 23 PHP
二进制交叉权限微型php类分享
Feb 07 PHP
一个php生成16位随机数的代码(两种方法)
Sep 16 PHP
PHP中SESSION的注销与清除
Apr 16 PHP
PHP中创建和验证哈希的简单方法实探
Jul 06 PHP
php使用pclzip类实现文件压缩的方法(附pclzip类下载地址)
Apr 30 PHP
CodeIgniter常用知识点小结
May 26 PHP
PHP简单实现DES加密解密的方法
Jul 12 PHP
laravel学习教程之关联模型
Jul 30 PHP
PHP 接入微信扫码支付总结(总结篇)
Nov 03 PHP
给大家分享几个常用的PHP函数
Jan 15 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对数组排序的简单实例
2013/12/25 PHP
php将mysql数据库整库导出生成sql文件的具体实现
2014/01/08 PHP
thinkPHP5框架闭包函数与子查询传参用法示例
2018/08/02 PHP
PHP实现的AES双向加密解密功能示例【128位】
2018/09/03 PHP
PHP正则匹配到2个字符串之间的内容方法
2018/12/24 PHP
javascript 原型模式实现OOP的再研究
2009/04/09 Javascript
js中将URL中的参数提取出来作为对象的实现代码
2011/08/16 Javascript
jquery 插件学习(六)
2012/08/06 Javascript
jQuery ajax(复习)—Baidu ajax request分离版
2013/01/24 Javascript
js将long日期格式转换为标准日期格式实现思路
2013/04/07 Javascript
JS实现根据当前文字选择返回被选中的文字
2014/05/21 Javascript
微信小程序实战之自定义toast(6)
2017/04/18 Javascript
十个免费的web前端开发工具详细整理
2017/09/18 Javascript
Chart.js 轻量级HTML5图表绘制工具库(知识整理)
2018/05/22 Javascript
vue cli2.0单页面title修改方法
2018/06/07 Javascript
Node.js API详解之 Error模块用法实例分析
2020/05/14 Javascript
Element Input输入框的使用方法
2020/07/26 Javascript
[43:18]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
python3中str(字符串)的使用教程
2017/03/23 Python
django反向解析和正向解析的方式
2018/06/05 Python
对python字典元素的添加与修改方法详解
2018/07/06 Python
python利用插值法对折线进行平滑曲线处理
2018/12/25 Python
python实现QQ空间自动点赞功能
2019/04/09 Python
基于 Django 的手机管理系统实现过程详解
2019/08/16 Python
Python搭建HTTP服务过程图解
2019/12/14 Python
英国首屈一指的票务公司:See Tickets
2019/05/11 全球购物
教师实习自我鉴定
2013/12/14 职场文书
尽职尽责村干部自我鉴定
2014/01/23 职场文书
护理专业毕业生自我鉴定总结
2014/03/24 职场文书
生物技术专业求职信
2014/06/10 职场文书
材料专业大学毕业生自荐书
2014/07/02 职场文书
动漫设计与制作专业推荐信
2014/07/07 职场文书
六年级学生期末评语
2014/12/26 职场文书
2015年卫生监督工作总结
2015/05/21 职场文书
2015中秋节晚会主持词
2015/07/01 职场文书
vue中控制mock在开发环境使用,在生产环境禁用方式
2022/04/06 Vue.js