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 相关文章推荐
获得Google PR值的PHP代码
Jan 28 PHP
escape unescape的php下的实现方法
Apr 27 PHP
PHP冒泡排序算法代码详细解读
Jul 17 PHP
深入理解ob_flush和flush的区别(ob_flush()与flush()使用方法)
Feb 06 PHP
PHP中$_FILES的使用方法及注意事项说明
Feb 14 PHP
PHP不用递归遍历目录下所有文件的代码
Jul 04 PHP
php中限制ip段访问、禁止ip提交表单的代码分享
Aug 22 PHP
纯php生成随机密码
Oct 30 PHP
PHP钩子与简单分发方式实例分析
Sep 04 PHP
浅谈PHP中pack、unpack的详细用法
Mar 12 PHP
PHP的mysqli_ssl_set()函数讲解
Jan 23 PHP
PHP设计模式之迭代器模式Iterator实例分析【对象行为型】
Apr 26 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下几种删除目录的方法总结
2007/08/19 PHP
PHP解决URL中文GBK乱码问题的两种方法
2014/06/03 PHP
php实现高效获取图片尺寸的方法
2014/12/12 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
js数组的操作详解
2013/03/27 Javascript
jQuery实现点击标题输入详细信息
2013/04/16 Javascript
JavaScript数组深拷贝和浅拷贝的两种方法
2014/04/16 Javascript
jquery实现动态操作select选中
2015/02/11 Javascript
jQuery设置和移除文本框默认值的方法
2015/03/09 Javascript
JavaScript中Function()函数的使用教程
2015/06/04 Javascript
简单实现JS计算器功能
2016/12/21 Javascript
vue element upload实现图片本地预览
2019/08/20 Javascript
layui数据表格重载实现往后台传参
2019/11/15 Javascript
JavaScript ES6 Class类实现原理详解
2020/05/08 Javascript
10分钟学会js处理json的常用方法
2020/12/06 Javascript
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:EE凭借法力虚空拿下4杀
2017/03/30 DOTA
[00:59]PWL开团时刻DAY7——我在赶
2020/11/06 DOTA
Python检测QQ在线状态的方法
2015/05/09 Python
Python实现对excel文件列表值进行统计的方法
2015/07/25 Python
利用python写个下载teahour音频的小脚本
2017/05/08 Python
Python浅复制中对象生存周期实例分析
2018/04/02 Python
python监测当前联网状态并连接的实例
2018/12/18 Python
python实现扫描局域网指定网段ip的方法
2019/04/16 Python
关于Python核心框架tornado的异步协程的2种方法详解
2019/08/28 Python
python 实现图片上传接口开发 并生成可以访问的图片url
2019/12/18 Python
Python unittest单元测试openpyxl实现过程解析
2020/05/27 Python
python向企业微信发送文字和图片消息的示例
2020/09/28 Python
HTML5本地存储localStorage、sessionStorage基本用法、遍历操作、异常处理等
2014/05/08 HTML / CSS
解决HTML5手机端页面缩放的问题
2017/10/27 HTML / CSS
运动会广播稿200米
2014/01/27 职场文书
关于廉洁的广播稿
2014/01/30 职场文书
教师党的群众路线教育实践活动个人整改措施
2014/11/04 职场文书
应届毕业生自荐信
2015/03/04 职场文书
导游词之黄帝陵景区
2019/09/16 职场文书
详解解Django 多对多表关系的三种创建方式
2021/08/23 Python
Spring Security动态权限的实现方法详解
2022/06/16 Java/Android