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 开发工具
Dec 06 PHP
PHP数组操作汇总 php数组的使用技巧
Jul 17 PHP
php安全开发 添加随机字符串验证,防止伪造跨站请求
Feb 14 PHP
PHP函数microtime()用法与说明
Dec 04 PHP
destoon利用Rewrite规则设置网站安全
Jun 21 PHP
PHP读取txt文本文件并分页显示的方法
Mar 11 PHP
Thinkphp3.2简单解决多文件上传只上传一张的问题
Sep 26 PHP
Yii2框架实现登陆添加验证码功能示例
Jul 12 PHP
ThinkPHP框架实现定时执行任务的两种方法分析
Sep 04 PHP
PHP通过文件保存和更新信息的方法分析
Sep 12 PHP
laravel框架上传图片实现实时预览功能
Oct 14 PHP
PHP文件操作简单介绍及函数汇总
Dec 11 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 Global变量定义当前页面的全局变量实现探讨
2013/06/05 PHP
PHP读取大文件的几种方法介绍
2016/10/27 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
2017/02/28 PHP
PHP实现基于3DES算法加密解密字符串示例
2018/08/24 PHP
document.all与WEB标准
2020/05/13 Javascript
JavaScript 模拟类机制及私有变量的方法及思路
2013/07/10 Javascript
JS+CSS实现美化的下拉列表框效果
2015/08/11 Javascript
jQuery animate easing使用方法图文详解
2016/06/17 Javascript
JS中递归函数
2016/06/17 Javascript
JavaScript仿网易选项卡制作代码
2016/10/06 Javascript
Vue2.0用户权限控制解决方案
2017/11/29 Javascript
基于JavaScript实现幸运抽奖页面
2020/07/05 Javascript
详解vue beforeRouteEnter 异步获取数据给实例问题
2019/08/09 Javascript
webpack是如何实现模块化加载的方法
2019/11/06 Javascript
微信小程序加载机制及运行机制图解
2019/11/27 Javascript
[00:20]DOTA2荣耀之路7:-ah fu-抢盾
2018/05/31 DOTA
python获取当前计算机cpu数量的方法
2015/04/18 Python
Python OS模块常用函数说明
2015/05/23 Python
Python单体模式的几种常见实现方法详解
2017/07/28 Python
python基础while循环及if判断的实例讲解
2017/08/25 Python
Python编程把二叉树打印成多行代码
2018/01/04 Python
python儿童学游戏编程知识点总结
2019/06/03 Python
python同步两个文件夹下的内容
2019/08/29 Python
Python多继承以及MRO顺序的使用
2019/11/11 Python
Python一行代码解决矩阵旋转的问题
2019/11/30 Python
关于tensorflow的几种参数初始化方法小结
2020/01/04 Python
Python基于paramunittest模块实现excl参数化
2020/04/26 Python
python飞机大战游戏实例讲解
2020/12/04 Python
农业资源与环境专业自荐信范文
2013/12/30 职场文书
会议接待欢迎词
2014/01/12 职场文书
业绩考核岗位职责
2014/02/01 职场文书
鸡毛信观后感
2015/06/11 职场文书
学困生转化工作总结
2015/08/13 职场文书
求职信:会计求职的写作技巧
2019/04/24 职场文书
Golang实现AES对称加密的过程详解
2021/05/20 Golang
Python编写冷笑话生成器
2022/04/20 Python