php验证码生成代码


Posted in PHP onNovember 11, 2015

验证码通常是用来安全保证我们网站注册或登录不被注入的,但为了更安全我们通常会生成一些混合验证码了,下面一起来看看例子.

在我们开发登录模块或者是论坛的灌水模块的时候,为了防止恶意提交,需要用到验证码,验证码就是用来区分人和机器的一种手段,当然这种手段不是万无一失,但总归会起到一些作用.

验证码的实现需要GD库的支持,没有开启GD库的童鞋需开启GD库,其实验证码的制作和使用非常的简单,仅仅只是需要4个步骤就可以搞定:创建验证码底图,显示验证码内容,增加干扰元素,输出验证码,下面我们来进行步骤拆分:

第一步:创建验证码底图

$image = imagecreatetruecolor(100, 30); // 创建一个宽为 100 高为 30 的底图 该底图的背景色 为黑色 是系统定义的 
$bgcolor = imagecolorallocate($image, 255, 255, 255);  // 为上面创建的底图分配 白色的背景颜色 
imagefill($image, 0, 0, $bgcolor); // 填充白色背景色

第二步:显示验证码内容

// 输出验证码内容 
for ($i=0; $i < 4; $i++) { 
  $fontsize = 6; 
  $fontcolor = imagecolorallocate($image, rand(0,120), rand(0,120), rand(0,120)); 
  $data = 'qwertyuipkjhgfdsazxcvbnm23456789'; 
  $content = substr($data, rand(0, strlen($data)), 1); 
  $x = ($i*100/4) + rand(5,9);  
  $y = rand(5,10); 
  imagestring($image, $fontsize, $x, $y, $content, $fontcolor); //在图像上水平输出一行字符串 
}

第三步:增加干扰元素

// 增加干扰点元素 
for ($i=0; $i < 300; $i++) { 
  $pointcolor = imagecolorallocate($image, rand(50,200), rand(50,200), rand(50,200)); 
  imagesetpixel($image, rand(0,99), rand(0,29), $pointcolor); 
} //开源软件:phpfensi.com 
// 增加干扰线元素  线 和 点 的颜色一定要控制好 要比验证码数字的颜色浅 避免出现验证码数字看不见的现象 
for ($i=0; $i < 4; $i++) { 
  $linecolor = imagecolorallocate($image, rand(100,240), rand(100,240), rand(100,240)); 
  imageline($image, rand(0,99), rand(0,29), rand(0,99), rand(0,29), $linecolor); 
}

第四步:输出验证码

// 输出创建的图像  在输出图像之前 必须输出头信息 用来规定输出的图像类型 
header("Content-Type: image/png"); 
imagepng($image); 
// 销毁图像 
imagedestroy($image);

至此,一个简单的验证码就实现了,关于实现验证码的注意事项已经写在了注释里,使用验证码的时候,我们一般都需要用session来保存以便验证,在这里就不作详细介绍。

以上就是php验证码生成代码,在重要的代码里已经进行了注释,大家可以仔细研究注释内容,也很重要,希望大家能够有所收获吧

PHP 相关文章推荐
PHP中的string类型使用说明
Jul 27 PHP
在PHP中PDO解决中文乱码问题的一些补充
Sep 06 PHP
《PHP编程最快明白》第八讲:php启发和小结
Nov 01 PHP
浅析php变量作用域的一些问题
Aug 08 PHP
PHP中unset,array_splice删除数组中元素的区别
Jul 28 PHP
ci检测是ajax还是页面post提交数据的方法
Nov 10 PHP
php中关于socket的系列函数总结
May 18 PHP
php实现在服务器端调整图片大小的方法
Jun 16 PHP
php设置页面超时时间解决方法
Sep 22 PHP
php实现的Curl封装类Curl.class.php用法实例分析
Sep 25 PHP
示例详解Laravel重置密码代码重构
Aug 10 PHP
解决windows上php xdebug 无法调试的问题
Feb 19 PHP
分享10段PHP常用代码
Nov 11 #PHP
php+mysql实现无限级分类
Nov 11 #PHP
2款PHP无限级分类实例代码
Nov 11 #PHP
PHP中set error handler函数用法小结
Nov 11 #PHP
php实现Session存储到Redis
Nov 11 #PHP
PHP防止刷新重复提交页面的示例代码
Nov 11 #PHP
PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
Nov 11 #PHP
You might like
PHP-FPM实现性能优化
2016/03/31 PHP
PHP7.1方括号数组符号多值复制及指定键值赋值用法分析
2016/09/26 PHP
PHP实现的贪婪算法实例
2017/10/17 PHP
Javascript学习笔记一 之 数据类型
2010/12/15 Javascript
jquery简单瀑布流实现原理及ie8下测试代码
2013/01/23 Javascript
JS中typeof与instanceof之间的区别总结
2013/11/14 Javascript
jquery实现鼠标悬浮停止轮播特效
2020/08/20 Javascript
学习JavaScript设计模式之代理模式
2016/01/12 Javascript
Json解析的方法小结
2016/06/22 Javascript
jQuery实现的导航下拉菜单效果示例
2016/09/05 Javascript
jstree的简单实例
2016/12/01 Javascript
Node.js的Mongodb使用实例
2016/12/30 Javascript
weui框架实现上传、预览和删除图片功能代码
2017/08/24 Javascript
vue项目中使用axios上传图片等文件操作
2017/11/02 Javascript
angularjs获取到My97DatePicker选中的值方法
2018/10/02 Javascript
详解vue组件中使用路由方法
2019/02/12 Javascript
vue使用recorder.js实现录音功能
2019/11/22 Javascript
js实现弹幕飞机效果
2020/08/27 Javascript
js在HTML的三种引用方式详解
2020/08/29 Javascript
vue 导出文件,携带请求头token操作
2020/09/10 Javascript
解决uWSGI的编码问题详解
2017/03/24 Python
Python实现通过文件路径获取文件hash值的方法
2017/04/29 Python
python实现批量nii文件转换为png图像
2019/07/18 Python
Python Django 实现简单注册功能过程详解
2019/07/29 Python
Python中的 sort 和 sorted的用法与区别
2019/08/10 Python
Python安装及Pycharm安装使用教程图解
2019/09/20 Python
python默认参数调用方法解析
2020/02/09 Python
python中文分词库jieba使用方法详解
2020/02/11 Python
分享8款纯CSS3实现的搜索框功能
2017/09/14 HTML / CSS
CSS3的calc()做响应模式布局的实现方法
2017/09/06 HTML / CSS
Html5 FileReader实现即时上传图片功能实例代码
2014/09/01 HTML / CSS
什么是静态路由?什么是动态路由?各自的特点是什么?
2015/09/16 面试题
英文求职信结束语大全
2013/10/26 职场文书
党员干部承诺书
2014/03/25 职场文书
优秀纪检干部材料
2014/08/27 职场文书
关于成立领导小组的通知
2015/04/23 职场文书