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 相关文章推荐
删除无限级目录与文件代码共享
Jul 12 PHP
php session 错误
May 21 PHP
shopex主机报错误请求解决方案(No such file or directory)
Dec 27 PHP
解析PHP中常见的mongodb查询操作
Jun 20 PHP
PHP操作文件的一些基本函数使用示例
Nov 18 PHP
PHP实现批量上传单个文件
Dec 29 PHP
详解php中反射的应用
Mar 15 PHP
php版微信返回用户text输入的方法
Nov 14 PHP
Yii框架实现多数据库配置和操作的方法
May 25 PHP
详解PHP发送邮件知识点
May 06 PHP
原生JS实现Ajax通过GET方式与PHP进行交互操作示例
May 12 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
Jun 16 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
frename PHP 灵活文件命名函数 frename
2009/09/09 PHP
php过滤html中的其他网站链接的方法(域名白名单功能)
2014/04/24 PHP
PHP符合PSR编程规范的实例分享
2016/12/21 PHP
解决laravel资源加载路径设置的问题
2019/10/14 PHP
关于laravel 日志写入失败问题汇总
2019/10/17 PHP
Jquery中给animation加更多的运作效果实例
2013/09/05 Javascript
js设置文本框中焦点位置在最后的示例代码(简单实用)
2014/03/04 Javascript
Javascript单元测试框架QUnitjs详细介绍
2014/05/08 Javascript
js重写alert控件(适合学习js的新手朋友)
2014/08/24 Javascript
Jquery遍历Json数据的方法
2015/04/20 Javascript
ES6中如何使用Set和WeakSet
2016/03/10 Javascript
轻松掌握JavaScript中的Math object数学对象
2016/05/26 Javascript
Bootstrap实现水平排列的表单
2016/07/04 Javascript
Vue注册组件命名时不能用大写的原因浅析
2019/04/25 Javascript
在mpvue框架中使用Vant WeappUI组件库的注意事项【推进】
2019/06/09 Javascript
javascript中innerHTML 获取或替换html内容的实现代码
2020/03/17 Javascript
微信小程序地图实现展示线路
2020/07/29 Javascript
[04:22]DOTA2上海特级锦标赛主赛事第四日TOP10
2016/03/06 DOTA
批量获取及验证HTTP代理的Python脚本
2017/04/23 Python
对numpy中向量式三目运算符详解
2018/10/31 Python
Python学习笔记之字符串和字符串方法实例详解
2019/08/22 Python
Python交互环境下打印和输入函数的实例内容
2020/02/16 Python
pandas数据拼接的实现示例
2020/04/16 Python
浅谈keras中的后端backend及其相关函数(K.prod,K.cast)
2020/06/29 Python
2021年的Python 时间轴和即将推出的功能详解
2020/07/27 Python
Hotels.com台湾:饭店订房网
2017/09/06 全球购物
官方授权图形T恤和服装:Fifth Sun
2019/06/12 全球购物
Hanky Panky官方网站:内衣和睡衣
2019/07/25 全球购物
高中生校园生活自我评价
2013/09/19 职场文书
工业自动化专业毕业生推荐信
2013/11/18 职场文书
求职简历中自我评价
2014/01/28 职场文书
幼儿园爱国卫生月活动总结
2014/06/30 职场文书
检讨书大全
2015/01/27 职场文书
2015最新婚礼主持词
2015/06/30 职场文书
opencv读取视频并保存图像的方法
2021/06/04 Python
Nginx+Tomcat负载均衡多实例详解
2022/04/11 Servers