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 相关文章推荐
Zend Framework页面缓存实例
Jun 25 PHP
PHP缓存机制Output Control详解
Jul 14 PHP
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
Jul 14 PHP
浅析php原型模式
Nov 25 PHP
推荐5款跨平台的PHP编辑器
Dec 25 PHP
linux下php上传文件注意事项
Jun 11 PHP
Yii2框架制作RESTful风格的API快速入门教程
Nov 08 PHP
Thinkphp通过一个入口文件如何区分移动端和PC端
Apr 18 PHP
Laravel框架中自定义模板指令总结
Dec 17 PHP
PHP数据源架构模式之表入口模式实例分析
Jan 23 PHP
php libevent 功能与使用方法详解
Mar 04 PHP
php判断数组是否为空的实例方法
May 10 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
PHP新手上路(十三)
2006/10/09 PHP
php adodb连接不同数据库
2009/03/19 PHP
PHP 5.5 创建和验证哈希最简单的方法详解
2013/11/07 PHP
php备份数据库类分享
2015/04/14 PHP
ThinkPHP里用U方法调用js文件实例
2015/06/18 PHP
thinkPHP线上自动加载异常与修复方法实例分析
2016/12/01 PHP
PHP数据库操作二:memcache用法分析
2017/08/16 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
PHP绕过open_basedir限制操作文件的方法
2018/06/10 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
2019/10/16 PHP
idTabs基于JQuery的根据URL参数选择Tab插件
2012/04/11 Javascript
Javascript中各种trim的实现详细解析
2013/12/10 Javascript
jquery实现动态操作select选中
2015/02/11 Javascript
jQuery鼠标事件汇总
2015/08/30 Javascript
jquery实现通用的内容渐显Tab选项卡效果
2015/09/07 Javascript
如何根据百度地图计算出两地之间的驾驶距离(两种语言js和C#)
2015/10/29 Javascript
基于javascript实现彩票随机数生成(升级版)
2020/04/17 Javascript
jquery中的常见问题及快速解决方法小结
2016/06/14 Javascript
如何检测JavaScript的各种类型
2016/07/30 Javascript
JavaScript设计模式之单例模式简单实例教程
2018/07/02 Javascript
Vue filter 过滤当前时间 实现实时更新效果
2019/12/20 Javascript
Python实现的生成自我描述脚本分享(很有意思的程序)
2014/07/18 Python
连接Python程序与MySQL的教程
2015/04/29 Python
python实现多线程抓取知乎用户
2016/12/12 Python
Python简单生成8位随机密码的方法
2017/05/24 Python
Python yield的用法实例分析
2020/03/06 Python
Django Model中字段(field)的各种选项说明
2020/05/19 Python
英国家喻户晓的高街品牌:River Island
2017/11/28 全球购物
Superdry极度干燥美国官网:英国制造的服装品牌
2018/11/13 全球购物
laravel使用redis队列实例讲解
2021/03/23 PHP
入党自我评价优缺点
2014/01/25 职场文书
工作证明范本(2篇)
2014/09/14 职场文书
2015年党务工作者个人工作总结
2015/10/22 职场文书
Java spring定时任务详解
2021/10/05 Java/Android
服务器nginx权限被拒绝解决案例
2022/09/23 Servers