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最常用的ini函数分析 针对PHP.ini配置文件
Apr 22 PHP
PHP中防止直接访问或查看或下载config.php文件的方法
Jul 07 PHP
php获取根域名方法汇总
Oct 28 PHP
php中数据库连接方式pdo和mysqli对比分析
Feb 25 PHP
PHP概率计算函数汇总
Sep 13 PHP
PHP代码维护,重构变困难的4种原因分析
Jan 25 PHP
Yii2单元测试用法示例
Nov 12 PHP
php中10个不同等级压缩优化图片操作示例
Nov 14 PHP
php 5.4 全新的代码复用Trait详解
Jan 05 PHP
在 Laravel 中 “规范” 的开发短信验证码发送功能
Oct 26 PHP
PHP中危险的file_put_contents函数详解
Nov 04 PHP
PHP预定义接口――Iterator用法示例
Jun 05 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
js 加载并解析XML字符串的代码
2009/12/13 Javascript
jquery1.4 教程二 ajax方法的改进
2010/02/25 Javascript
解析offsetHeight,clientHeight,scrollHeight之间的区别
2013/11/20 Javascript
深入理解javascript变量声明
2014/11/20 Javascript
javascript关于继承的用法汇总
2014/12/20 Javascript
JavaScript实现更改网页背景与字体颜色的方法
2015/02/02 Javascript
JQuery调用绑定click事件的3种写法
2015/03/28 Javascript
js点击列表文字对应该行显示背景颜色的实现代码
2015/08/05 Javascript
EasyUI创建对话框的两种方式
2016/08/23 Javascript
javascript设计模式之单体模式学习笔记
2017/02/15 Javascript
Angularjs为ng-click事件传递参数
2017/06/15 Javascript
浅谈箭头函数写法在ReactJs中的使用
2017/08/22 Javascript
JS实现统计字符串中字符出现个数及最大个数功能示例
2018/06/04 Javascript
解决Vue axios post请求,后台获取不到数据的问题方法
2018/08/11 Javascript
element-ui 上传图片后清空图片显示的实例
2018/09/04 Javascript
vue vantUI tab切换时 list组件不触发load事件的问题及解决方法
2020/02/14 Javascript
解决Vue的文本编辑器 vue-quill-editor 小图标样式排布错乱问题
2020/08/03 Javascript
[56:42]VP vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python实现调用其他python脚本的方法
2014/10/05 Python
python学习开发mock接口
2019/04/28 Python
Python random模块的使用示例
2020/10/10 Python
使用css3实现超炫的loading加载动画效果
2014/05/07 HTML / CSS
解决CSS3的opacity属性带来的层叠顺序问题
2016/05/09 HTML / CSS
意大利团购网站:Groupon意大利
2016/10/11 全球购物
英国奢侈品网站:MatchesFashion
2016/12/16 全球购物
俄罗斯香水在线商店:AromaCode
2019/12/04 全球购物
运动会广播稿300字
2014/01/10 职场文书
货车司机岗位职责
2014/03/18 职场文书
公司的门卫岗位职责
2014/09/09 职场文书
个人务虚会发言材料
2014/10/20 职场文书
实施意见格式范本
2015/06/05 职场文书
《春酒》教学反思
2016/02/22 职场文书
2019年思想汇报
2019/06/20 职场文书
三年级作文之趣事作文
2019/11/04 职场文书
导游词之杭州岳王庙
2019/11/13 职场文书
python实现批量提取指定文件夹下同类型文件
2021/04/05 Python