PHP通过GD库实现验证码功能示例


Posted in PHP onFebruary 23, 2019

本文实例讲述了PHP通过GD库实现验证码功能。分享给大家供大家参考,具体如下:

首先看看实现的效果:

PHP通过GD库实现验证码功能示例

具体实现:

<?php
/*PHP实现验证码*/
session_start();//开启会话
//创建画布
$image=imagecreatetruecolor(100,38);
//背景颜色
$bgcolor=imagecolorallocate($image,255,255,255);
imagefill($image,0,0,$bgcolor);
$captch_code='';//存储验证码
//随机选取4个数字
for($i=0;$i<4;$i++){
  $fontsize=10;    //
  $fontcolor=imagecolorallocate($image,rand(0,120),rand(0,120),rand(0,120));//随机颜色
  $fontcontent=rand(0,9);
  $captch_code.=$fontcontent;
  $x=($i*100/4)+rand(5,10);  //随机坐标
  $y=rand(5,10);
  imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor);
}
/*//字母和数字混合验证码
for($i=0;$i<4;$i++) {
  $fontsize = 10;    //
  $fontcolor = imagecolorallocate($image, rand(0, 120), rand(0, 120), rand(0, 120));//??????
  $data = 'abcdefghijklmnopqrstuvwxyz1234567890';  //数据字典
  $fontcontent = substr($data, rand(0, strlen($data)), 1);
  $captch_code.=$fontcontent;
  $x = ($i * 100 / 4) + rand(5, 10);
  $y = rand(5, 10);
  imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
}*/
$_SESSION['code']=$captch_code;
//增加干扰点
for($i=0;$i<200;$i++){
  $pointcolor=imagecolorallocate($image,rand(50,200),rand(50,200),rand(50,200));
  imagesetpixel($image,rand(1,99),rand(1,29),$pointcolor);//
}
//增加干扰线
for($i=0;$i<3;$i++){
  $linecolor=imagecolorallocate($image,rand(80,280),rand(80,220),rand(80,220));
  imageline($image,rand(1,99),rand(1,29),rand(1,99),rand(1,29),$linecolor);
}
//输出格式
header('content-type:image.png');
imagepng($image);
//销毁图片
imagedestroy($image);

实现表单的连接和“换一个”功能的实现:

<input type="text" placeholder="验证码" name="verifycode" class="captcha"><br><br>
<img id="captcha_img" src="captcha.php?r=<?php echo rand();?>" alt="验证码">
<label><a href="javascript:void(0)" rel="external nofollow" onclick="document.getElementById('captcha_img').src='captcha.php?r='+Math.random()">换一个</a> </label>

captcha.php后面加上一个随机参数是为了实现换一个验证码的功能,,换一个功能通过简单的js即可实现。如果没有这个功能可以不用参数。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
高亮度显示php源代码
Oct 09 PHP
php echo()和print()、require()和include()函数区别说明
Mar 27 PHP
使用php语句将数据库*.sql文件导入数据库
May 05 PHP
PHP获取音频文件的相关信息
Jun 22 PHP
php mongodb操作类 带几个简单的例子
Aug 25 PHP
基于PHP实现用户注册登录功能
Oct 14 PHP
Yii遍历行下每列数据的方法
Oct 17 PHP
PHP递归实现文件夹的复制、删除、查看大小操作示例
Aug 11 PHP
Laravel框架实现redis集群的方法分析
Sep 14 PHP
PHP数组去重的更快实现方式分析
May 09 PHP
PHP正则判断一个变量是否为正整数的方法
Feb 27 PHP
PHP基于进程控制函数实现多线程
Dec 09 PHP
php中file_get_contents()函数用法实例
Feb 21 #PHP
PHP基于mcript扩展实现对称加密功能示例
Feb 21 #PHP
PHP+jQuery实现双击修改table表格功能示例
Feb 21 #PHP
PHP+jQuery实现即点即改功能示例
Feb 21 #PHP
PHP hebrev()函数用法讲解
Feb 21 #PHP
Yii2.0框架实现带分页的多条件搜索功能示例
Feb 20 #PHP
PHP获取访问设备信息的方法示例
Feb 20 #PHP
You might like
ie和firefox中img对象区别的困惑
2006/12/27 Javascript
Mootools 1.2教程 函数
2009/09/15 Javascript
$(document).ready(function() {})不执行初始化脚本
2014/06/19 Javascript
老司机带你解读jQuery插件开发流程
2016/05/16 Javascript
Angular表单验证实例详解
2016/10/20 Javascript
用headjs来管理和加载js 提高网站加载速度
2016/11/29 Javascript
Angularjs的键盘事件的绑定
2017/07/27 Javascript
vue-cli 默认路由再子路由选中下的选中状态问题及解决代码
2018/09/06 Javascript
使用JS来动态操作css的几种方法
2019/12/18 Javascript
解决vue elementUI中table里数字、字母、中文混合排序问题
2020/01/07 Javascript
javascript实现文字跑马灯效果
2020/06/18 Javascript
详解element-ui动态限定的日期范围选择器代码片段
2020/07/03 Javascript
Element InfiniteScroll无限滚动的具体使用方法
2020/07/27 Javascript
[00:35]2016完美“圣”典风云人物:冷冷宣传片
2016/12/08 DOTA
python解析xml文件实例分享
2013/12/04 Python
python获取糗百图片代码实例
2013/12/18 Python
python有证书的加密解密实现方法
2014/11/19 Python
Python中给List添加元素的4种方法分享
2014/11/28 Python
Python Web程序搭建简单的Web服务器
2019/07/31 Python
OpenCV+face++实现实时人脸识别解锁功能
2019/08/28 Python
python使用sklearn实现决策树的方法示例
2019/09/12 Python
tensorboard实现同时显示训练曲线和测试曲线
2020/01/21 Python
快速解决jupyter notebook启动需要密码的问题
2020/04/21 Python
Python如何定义有默认参数的函数
2020/08/10 Python
迷你唐卡软皮鞋:Minnetonka Moccasin
2018/05/01 全球购物
世界上最大的隐形眼镜商店:1-800 Contacts
2018/11/03 全球购物
C面试题
2015/10/08 面试题
Android面试题附答案
2014/12/08 面试题
汇智创新科技发展有限公司
2015/12/06 面试题
营业员演讲稿
2013/12/30 职场文书
运动会广播稿500字
2014/01/28 职场文书
我的职业生涯规划:打造自己的运动帝国
2014/09/18 职场文书
2014年第四季度入党积极分子思想汇报(十八届四中全会)
2014/11/03 职场文书
仓库统计员岗位职责
2015/04/14 职场文书
会计工作自我鉴定范文
2019/06/21 职场文书
Nginx反向代理及负载均衡如何实现(基于linux)
2021/03/31 Servers