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 相关文章推荐
MySQL数据源表结构图示
Jun 05 PHP
PHP定时执行计划任务的多种方法小结
Dec 19 PHP
用PHP实现小写金额转换大写金额的代码(精确到分)
Jan 10 PHP
深入php self与$this的详解
Jun 08 PHP
适用于抽奖程序、随机广告的PHP概率算法实例
Apr 09 PHP
PHP获取当前页面URL函数实例
Oct 22 PHP
PHP连接MSSQL时nvarchar字段长度被截断为255的解决方法
Dec 25 PHP
分享下php5类中三种数据类型的区别
Jan 26 PHP
php实现的通用图片处理类
Mar 24 PHP
PHP 二维数组和三维数组的过滤
Mar 16 PHP
Laravel 连接(Join)示例
Oct 16 PHP
thinkphp5.1 框架导入/导出excel文件操作示例
May 25 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
PHP5中的时间相差8小时的解决办法
2008/03/28 PHP
深入php之规范编程命名小结
2013/05/15 PHP
php变量作用域的深入解析
2013/06/03 PHP
php封装的验证码类分享
2017/02/26 PHP
PHP5中使用mysqli的prepare操作数据库的介绍
2019/03/18 PHP
PHP查找一列有序数组是否包含某值的方法
2020/02/07 PHP
两个SUBMIT按钮,如何区分处理
2006/08/22 Javascript
用javascript动态调整iframe高度的方法
2007/03/06 Javascript
[原创]来自ImageSee官方 JavaScript图片浏览器
2008/01/16 Javascript
javascript Array.remove() 数组删除
2009/08/06 Javascript
Js参数值中含有单引号或双引号问题的解决方法
2013/11/06 Javascript
JS获取当前日期和时间的简单实例
2013/11/19 Javascript
jQuery+PHP实现可编辑表格字段内容并实时保存
2015/10/09 Javascript
解决jQuery使用JSONP时产生的错误
2015/12/02 Javascript
javascript从作用域链谈闭包
2020/07/29 Javascript
5个最顶级jQuery图表类库插件【jquery插件库】
2016/05/05 Javascript
为什么我们要做三份 Webpack 配置文件
2017/09/18 Javascript
javascript数组定义的几种方法
2017/10/06 Javascript
解决bootstrap中下拉菜单点击后不关闭的问题
2018/08/10 Javascript
关于layui toolbar和template的结合使用方法
2019/09/19 Javascript
layui: layer.open加载窗体时出现遮罩层的解决方法
2019/09/26 Javascript
详解vue中v-bind:style效果的自定义指令
2020/01/21 Javascript
Python 备份程序代码实现
2017/03/06 Python
python十进制和二进制的转换方法(含浮点数)
2018/07/07 Python
wxPython的安装与使用教程
2018/08/31 Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
2019/08/19 Python
Python中的引用和拷贝实例解析
2019/11/14 Python
Lenox官网:精美的瓷器&独特的礼品
2017/02/12 全球购物
荷兰男士时尚网上商店:Suitable
2017/12/25 全球购物
瑞典耳机品牌:URBANISTA
2019/12/03 全球购物
广州一家公司的.NET面试题
2016/06/11 面试题
环境科学毕业生自荐信
2013/11/21 职场文书
四查四看剖析材料
2014/02/14 职场文书
公司门卫岗位职责
2015/04/13 职场文书
Python可视化学习之matplotlib内置单颜色
2022/02/24 Python
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
2022/08/05 Vue.js