PHP实现验证码校验功能


Posted in PHP onNovember 16, 2017

验证码的校验是利用PHP中的 SESSION功能来实现。
在最顶端声明函数 session_start(); 告诉服务器我们要用这个函数的功能。

session_start();

接下来我们用到的就是验证码实现的代码。这里用英文数字的代码为例。

$image = imagecreatetruecolor(100, 30); //创建一个100×30的画布 
$white = imagecolorallocate($image,255,255,255);//白色 
imagefill($image,0,0,$white);//覆盖黑色画布

然后在验证码实现之前声明一个空变量,用来存放验证码。

$session = ""; //空变量 ,存放验证码 
for($i=0;$i<4;$i++){ 
  $size = 6; 
  $x = $i*25+mt_rand(5,10); 
  $y = mt_rand(5,10); 
  $sizi_color = imagecolorallocate($image,mt_rand(80,220),mt_rand(80,220),mt_rand(80,220)); 
  $char = join("",array_merge(range('a','z'),range('A','Z'),range(0,9))); 
  $char = str_shuffle($char); 
  $char = substr($char,0,1); 
  imagestring($image,$size,$x,$y,$char,$sizi_color); 
  $session .= $char ; //把验证码的每一个值赋值给变量 
} 
  $_SESSION['session'] = $session; //这个变量的值与用户输入的值相等
for($k=0;$k<200;$k++){ 
  $rand_color = imagecolorallocate($image,mt_rand(50,200),mt_rand(50,200),mt_rand(50,200)); 
  imagesetpixel($image,mt_rand(1,99),mt_rand(1,29),$rand_color); 
} 
 
for($n=0;$n<5;$n++){ 
  $line_color = imagecolorallocate($image,mt_rand(80,220),mt_rand(80,220),mt_rand(80,220)); 
  imageline($image,mt_rand(1,99),mt_rand(1,29),mt_rand(1,99),mt_rand(1,29),$line_color); 
} 
 
header('content-type:image/png');//设置文件输出格式 
imagepng( $image ); //以png格式输出$image图像 
imagedestroy( $image ); //销毁图像

用 POST 方式来接收验证码。 strtolower 函数是让服务器不区分大小写。这样可以有效减少用户的输错率。

if(isset($_POST['session'])){ 
  session_start(); 
  if(strtolower($_POST['session'])==strtolower($_SESSION['session'])){ 
    echo'<font color="#0000CC">输入正确</form>'; 
  }else{ 
    echo '<font color="#CC0000"><b>输入错误</b></font>'; 
  } 
  exit(); 
}

下面是HTML的页面代码。

<!DOCTYPE html> 
<html> 
<head> 
 <meta charset="utf-8"/> 
 <title>确认验证码</title> 
</head> 
<body> 
  <form method="post" action="./tushu.php"> 
  <p>验证码图片:<img id="img" border="1" src="http://localhost//xxx.php" width="100" height="30"></p> 
  <a href="javascript:void(0)" rel="external nofollow" onclick="document.getElementById('img').src='http://localhost//xxx.php'">看不清?换一个</a> 
  <p>请输入图片中的验证码:<input type="text" name="session" value=""/></p> 
  <p><input type="submit" value="提交" style="padding:6px 10px;"></p> 
  </form> 
</body> 
</html>

这里特别说明一下 HTML代码中加入了一个事件 onclick .当用户无法识别当前验证码的时候可以不用刷新浏览器,直接点击“看不清?换一个”即可更换验证码。

PHP实现验证码校验功能

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP开发大型项目的一点经验
Oct 09 PHP
PHP 命令行参数详解及应用
May 18 PHP
深入for,while,foreach遍历时间比较的详解
Jun 08 PHP
php使用curl模拟登录后采集页面的例子
Nov 04 PHP
ThinkPHP后台首页index使用frameset时的注意事项分析
Aug 22 PHP
PHP GD库生成图像的几个函数总结
Nov 19 PHP
PHP防盗链的基本思想 防盗链的设置方法
Sep 25 PHP
Yii中CArrayDataProvider和CActiveDataProvider区别实例分析
Mar 02 PHP
Laravel中使用FormRequest进行表单验证方法及问题汇总
Jun 19 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
Nov 15 PHP
PHP聚合式迭代器接口IteratorAggregate用法分析
Dec 28 PHP
解决Laravel 使用insert插入数据,字段created_at为0000的问题
Oct 11 PHP
学习thinkphp5.0验证类使用方法
Nov 16 #PHP
thinkPHP中钩子的使用方法实例分析
Nov 16 #PHP
php表单处理操作
Nov 16 #PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
Nov 16 #PHP
Laravel下生成验证码的类
Nov 15 #PHP
Ajax中的JSON格式与php传输过程全面解析
Nov 14 #PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
Nov 14 #PHP
You might like
PHP读取PPT文件的方法
2015/12/10 PHP
Yii视图操作之自定义分页实现方法
2016/07/14 PHP
golang实现php里的serialize()和unserialize()序列和反序列方法详解
2018/10/30 PHP
Laravel框架实现多数据库连接操作详解
2019/07/12 PHP
jQuery Study Notes学习笔记 (二)
2010/08/04 Javascript
Jquery常用技巧收集整理篇
2010/11/14 Javascript
一次失败的jQuery优化尝试小结
2011/02/06 Javascript
javascript中文本框中输入法切换的问题
2013/12/10 Javascript
jquery鼠标停止移动事件
2013/12/21 Javascript
用javascript替换URL中的参数值示例代码
2014/01/27 Javascript
如何将网页表格内容导入excel
2014/02/18 Javascript
Jquery validation remote 验证的缓存问题解决方法
2014/03/25 Javascript
手动初始化Angular的模块与控制器
2016/12/26 Javascript
数组Array的一些方法(总结)
2017/02/17 Javascript
js 调用百度分享功能
2017/02/27 Javascript
jQuery源码解读之extend()与工具方法、实例方法详解
2017/03/30 jQuery
JS实现队列的先进先出功能示例
2017/05/10 Javascript
基于AngularJS实现表单验证功能
2017/07/28 Javascript
vue自定义键盘信息、监听数据变化的方法示例【基于vm.$watch】
2019/03/16 Javascript
JavaScript中callee和caller的区别与用法实例分析
2019/06/28 Javascript
[59:00]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第一场 3月7日
2021/03/11 DOTA
python将ansible配置转为json格式实例代码
2017/05/15 Python
解决tensorflow1.x版本加载saver.restore目录报错的问题
2018/07/26 Python
python 判断linux进程,并杀死进程的实现方法
2019/07/01 Python
Python使用mongodb保存爬取豆瓣电影的数据过程解析
2019/08/14 Python
Python3 tkinter 实现文件读取及保存功能
2019/09/12 Python
Django中使用MySQL5.5的教程
2019/12/18 Python
Python进阶之迭代器与迭代器切片教程
2020/01/29 Python
Python xlwt模块使用代码实例
2020/06/10 Python
使用pandas实现筛选出指定列值所对应的行
2020/12/13 Python
澳洲的服装老品牌:SABA
2018/02/06 全球购物
法国在线药房:Shop Pharmacie
2019/11/26 全球购物
八年级生物教学反思
2014/01/22 职场文书
2016年情人节广告语
2016/01/28 职场文书
Python干货实战之八音符酱小游戏全过程详解
2021/10/24 Python
i7 6700处理器相当于i5几代
2022/04/19 数码科技