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下获取客户端ip地址的函数
Mar 15 PHP
PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
May 10 PHP
Thinkphp调用Image类生成缩略图的方法
Mar 07 PHP
php对文件进行hash运算的方法
Apr 03 PHP
php加密解密字符串示例
Oct 13 PHP
PHP的反射机制实例详解
Mar 29 PHP
由php中字符offset特征造成的绕过漏洞详解
Jul 07 PHP
Laravel中使用Queue的最基本操作教程
Dec 27 PHP
购物车实现的几种方式优缺点对比
May 02 PHP
laravel使用Faker数据填充的实现方法
Apr 12 PHP
Laravel 框架路由原理与路由访问实例分析
Apr 14 PHP
php中pcntl_fork详解
Apr 01 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
纯真IP数据库的应用 IP地址转化成十进制
2009/06/14 PHP
浅谈COOKIE和SESSION区别
2015/07/19 PHP
thinkphp3.2.3版本的数据库增删改查实现代码
2016/09/22 PHP
详解PHP防止直接访问.php 文件的实现方法
2017/07/28 PHP
PHP文件打开关闭及读写操作示例解析
2020/08/06 PHP
jQuery实现简洁的导航菜单效果
2015/11/23 Javascript
基于jquery实现页面滚动时顶部导航显示隐藏
2020/04/20 Javascript
SWFUpload多文件上传及文件个数限制的方法
2016/05/31 Javascript
分分钟玩转Vue.js组件
2016/10/25 Javascript
Web前端框架bootstrap实战【第一次接触使用】
2016/12/28 Javascript
利用transition实现文字上下抖动的效果
2017/01/21 Javascript
BootStrap Table实现server分页序号连续显示功能(当前页从上一页的结束序号开始)
2017/09/12 Javascript
vuejs项目打包之后的首屏加载优化及打包之后出现的问题
2018/04/01 Javascript
解决 viewer.js 动态更新图片导致无法预览的问题
2019/05/14 Javascript
Layui 动态禁止select下拉的例子
2019/09/03 Javascript
基于vue中的scoped坑点解说
2020/09/04 Javascript
JS实现密码框效果
2020/09/10 Javascript
详解vue3.0 的 Composition API 的一种使用方法
2020/10/26 Javascript
[01:05:40]VG vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python2.7的编码问题与解决方法
2016/10/04 Python
python使用matplotlib绘制柱状图教程
2017/02/08 Python
Python在信息学竞赛中的运用及Python的基本用法(详解)
2017/08/15 Python
Python实现从log日志中提取ip的方法【正则提取】
2018/03/31 Python
python向企业微信发送文字和图片消息的示例
2020/09/28 Python
PyCharm 解决找不到新打开项目的窗口问题
2021/01/15 Python
基于HTML5+Webkit实现树叶飘落动画
2017/12/28 HTML / CSS
橄榄树药房:OLIVEDA
2019/09/01 全球购物
新学期红领巾广播稿
2014/01/14 职场文书
大学生活动策划方案
2014/02/10 职场文书
法律进企业活动方案
2014/03/04 职场文书
基层党员群众路线教育实践活动个人对照检查材料思想汇报
2014/10/05 职场文书
四风问题自查自纠工作情况报告
2014/10/28 职场文书
2015年资料员工作总结
2015/04/25 职场文书
中学生运动会广播稿
2015/08/19 职场文书
sql字段解析器的实现示例
2021/06/23 SQL Server
《巫师》是美食游戏?CDPR10月将推出《巫师》官方食谱
2022/04/03 其他游戏