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 相关文章推荐
4.与数据库的连接
Oct 09 PHP
消息持续发送的完整例子
Oct 09 PHP
一些PHP写的小东西
Dec 06 PHP
PHP中的魔术方法总结和使用实例
May 11 PHP
浅析php设计模式之数据对象映射模式
Mar 03 PHP
PHP环形链表实现方法示例
Sep 15 PHP
Laravel框架中自定义模板指令总结
Dec 17 PHP
PHP使Laravel为JSON REST API返回自定义错误的问题
Oct 16 PHP
PHP校验15位和18位身份证号的类封装
Nov 07 PHP
php ActiveMQ的安装与使用方法图文教程
Feb 23 PHP
PHP实现基本留言板功能原理与步骤详解
Mar 26 PHP
PHP数组实际占用内存大小原理解析
Dec 11 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
中国的第一台收音机
2021/03/01 无线电
hessian 在PHP中的使用介绍
2010/12/13 PHP
javascript 面向对象,实现namespace,class,继承,重载
2009/10/29 Javascript
JS,Jquery获取select,dropdownlist,checkbox下拉列表框的值(示例代码)
2014/01/11 Javascript
express的中间件cookieParser详解
2014/12/04 Javascript
node.js中的fs.futimesSync方法使用说明
2014/12/17 Javascript
js常用系统函数用法实例分析
2015/01/12 Javascript
jquery滚动到顶部底部代码
2015/04/20 Javascript
微信小程序去哪里找 小程序到底如何使用(附小程序名单)
2017/01/09 Javascript
Javascript 两种刷新方法以及区别和适用范围
2017/01/17 Javascript
ES6新特性之Symbol类型用法分析
2017/03/31 Javascript
vue todo-list组件发布到npm上的方法
2018/04/04 Javascript
Vue使用json-server进行后端数据模拟功能
2018/04/17 Javascript
JavaScript实现读取与输出XML文件数据的方法示例
2018/06/05 Javascript
JavaScript变量Dom对象的所有属性
2020/04/30 Javascript
[01:23:35]Ti4主赛事胜者组 DK vs EG 1
2014/07/19 DOTA
[01:06] DOTA2英雄背景故事第三期之秩序法则光之守卫
2020/07/07 DOTA
下载糗事百科的内容_python版
2008/12/07 Python
使用Python来开发Markdown脚本扩展的实例分享
2016/03/04 Python
浅谈python中的变量默认是什么类型
2016/09/11 Python
Python数据结构之哈夫曼树定义与使用方法示例
2018/04/22 Python
python发送邮件脚本
2018/05/22 Python
python机器学习之KNN分类算法
2018/08/29 Python
对python中大文件的导入与导出方法详解
2018/12/28 Python
详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
2020/04/01 Python
python 等差数列末项计算方式
2020/05/03 Python
Python监听键盘和鼠标事件的示例代码
2020/11/18 Python
利用纯CSS3实现动态的自行车特效源码
2017/01/20 HTML / CSS
详解CSS 3 中的 calc() 方法
2018/01/12 HTML / CSS
总结html5自定义属性有哪些
2020/04/01 HTML / CSS
Tomcat中怎么使用log4j输出所有的log
2016/07/07 面试题
机电一体化自荐信
2013/12/10 职场文书
畜牧兽医本科生的自我评价
2014/03/03 职场文书
党员群众路线教育实践活动剖析材料
2014/10/10 职场文书
爱心捐款感谢信
2015/01/20 职场文书
2015年材料员工作总结
2015/04/30 职场文书