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中的正则表达式函数介绍
Feb 27 PHP
Zend的MVC机制使用分析(一)
May 02 PHP
如何在PHP中使用正则表达式进行查找替换
Jun 13 PHP
一漂亮的PHP图片验证码实例
Mar 21 PHP
ThinkPHP的L方法使用简介
Jun 18 PHP
php中ob_flush函数和flush函数用法分析
Mar 18 PHP
PHP去掉json字符串中的反斜杠\及去掉双引号前的反斜杠
Sep 30 PHP
PHP7新特性foreach 修改示例介绍
Aug 26 PHP
thinkphp3.2中实现phpexcel导出带生成图片示例
Feb 14 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
Aug 15 PHP
PHP与Perl之间知识点区别整理
Mar 19 PHP
laravel入门知识点整理
Sep 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
ThinkPHP视图查询详解
2014/06/30 PHP
thinkPHP和onethink微信支付插件分享
2019/08/11 PHP
用户注册常用javascript代码
2009/08/29 Javascript
Riot.js 快速的JavaScript单元测试框架
2009/11/09 Javascript
JavaScript利用append添加元素报错的解决方法
2014/07/01 Javascript
jQuery支持动态参数将函数绑定到事件上的方法
2015/03/17 Javascript
javascript十六进制及二进制转化的方法
2015/05/06 Javascript
js实现点击链接后延迟3秒再跳转的方法
2015/06/05 Javascript
最全的Javascript编码规范(推荐)
2016/06/22 Javascript
详解Node.js中的事件机制
2016/09/22 Javascript
jQuery删除当前节点元素
2016/12/07 Javascript
jquery滚动条插件(可以自定义)
2016/12/11 Javascript
loading动画特效小结
2017/01/22 Javascript
javascript 中模板方法单例的实现方法
2017/10/17 Javascript
JS实现方形抽奖效果
2018/08/27 Javascript
vue项目使用微信公众号支付总结及遇到的坑
2018/10/23 Javascript
微信小程序实现手势滑动卡片效果
2019/08/26 Javascript
jQuery实现简易聊天框
2020/02/08 jQuery
UEditor 自定义图片视频尺寸校验功能的实现代码
2020/10/20 Javascript
[02:43]DOTA2英雄基础教程 圣堂刺客
2013/12/09 DOTA
[51:15]完美世界DOTA2联赛PWL S2 PXG vs Magma 第一场 11.21
2020/11/24 DOTA
Python yield使用方法示例
2013/12/04 Python
python批量提交沙箱问题实例
2014/10/08 Python
用Python编写web API的教程
2015/04/30 Python
python matplotlib实现双Y轴的实例
2019/02/12 Python
在windows下使用python进行串口通讯的方法
2019/07/02 Python
django之静态文件 django 2.0 在网页中显示图片的例子
2019/07/28 Python
HTML5自定义mp3播放器源码
2020/01/06 HTML / CSS
Debenhams百货英国官方网站:Debenhams UK
2016/07/12 全球购物
Diptyque英国官方网站:源自法国的知名香氛品牌
2019/08/28 全球购物
仓库管理制度
2014/01/21 职场文书
大型公益活动策划方案
2014/08/20 职场文书
建设工程授权委托书
2014/09/22 职场文书
2014年科室工作总结范文
2014/12/19 职场文书
「天才王子的赤字国家重生术」妮妮姆·拉雷粘土人开订
2022/03/21 日漫
Redis数据同步之redis shake的实现方法
2022/04/21 Redis