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 相关文章推荐
NO3第三帝国留言簿制作过程
Oct 09 PHP
PHP Socket 编程
Apr 09 PHP
JS中encodeURIComponent函数用php解码的代码
Mar 01 PHP
php下载文件的代码示例
Jun 29 PHP
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
Jul 10 PHP
ThinkPHP实例化模型的四种方法概述
Aug 22 PHP
PHP模板解析类实例
Jul 09 PHP
PHP面向对象编程之深入理解方法重载与方法覆盖(多态)
Dec 24 PHP
浅谈PHP中静态方法和非静态方法的相互调用
Oct 04 PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
Oct 12 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
Apr 04 PHP
解决Laravel自定义类引入和命名空间的问题
Oct 15 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脚本的10个技巧(7)
2006/10/09 PHP
Smarty变量用法详解
2016/05/11 PHP
Zend Framework教程之Zend_Helpers动作助手ViewRenderer用法详解
2016/07/20 PHP
完美解决php 导出excle的.csv格式的数据时乱码问题
2017/02/18 PHP
js中将HTMLCollection/NodeList/伪数组转换成数组的代码
2011/07/31 Javascript
DIV+CSS+JS不间断横向滚动实现代码
2013/03/19 Javascript
jquery js 重置表单 reset()具体实现代码
2013/08/05 Javascript
浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法
2014/01/10 Javascript
javascript伸缩型菜单实现代码
2015/11/16 Javascript
jQuery Mobile 触摸事件实例
2016/06/04 Javascript
实现JavaScript高性能的数据存储
2016/12/11 Javascript
基于JS对象创建常用方式及原理分析
2017/06/28 Javascript
值得收藏的vuejs安装教程
2017/11/21 Javascript
Layui给数据表格动态添加一行并跳转到添加行所在页的方法
2018/08/20 Javascript
jQuery基于随机数解决中午吃什么去哪吃问题示例
2018/12/29 jQuery
微信小程序全局变量改变监听的实现方法
2019/07/15 Javascript
vue中使用v-model完成组件间的通信
2019/08/22 Javascript
ES6 Object.assign()的用法及其使用
2020/01/18 Javascript
Python实现类似jQuery使用中的链式调用的示例
2016/06/16 Python
python使用turtle库绘制时钟
2020/03/25 Python
Django 自定义权限管理系统详解(通过中间件认证)
2020/03/11 Python
Python爬虫制作翻译程序的示例代码
2021/02/22 Python
Python页面加载的等待方式总结
2021/02/28 Python
html5播放视频且动态截图实现步骤与代码(支持safari其他未测试)
2013/01/06 HTML / CSS
世界上获奖最多的手机镜头:Olloclip
2018/03/03 全球购物
美国沃尔玛网上超市:Walmart
2020/08/14 全球购物
幼师自荐信范文
2013/10/06 职场文书
建筑毕业生自我鉴定
2013/10/18 职场文书
2014学雷锋活动心得体会
2014/03/10 职场文书
自考毕业自我鉴定
2014/03/18 职场文书
学习三严三实对照检查材料思想汇报
2014/09/22 职场文书
社区党支部承诺书
2015/04/29 职场文书
电影雷锋观后感
2015/06/10 职场文书
2015年党务工作者个人工作总结
2015/10/22 职场文书
nginx搭建NFS网络文件系统
2022/04/14 Servers
Vue OpenLayer 为地图绘制风场效果
2022/04/24 Vue.js