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 相关文章推荐
几种显示数据的方法的比较
Oct 09 PHP
php笔记之:数据类型与常量的使用分析
May 14 PHP
php图片缩放实现方法
Feb 20 PHP
解决phpcms更换javascript的幻灯片代码调用图片问题
Dec 26 PHP
php实现cookie加密的方法
Mar 10 PHP
PHP实现通过正则表达式替换回调的内容标签
Jun 15 PHP
PHP中对数组的一些常用的增、删、插操作函数总结
Nov 27 PHP
yii2高级应用之自定义组件实现全局使用图片上传功能的方法
Oct 08 PHP
PHP设置Cookie的HTTPONLY属性方法
Feb 09 PHP
php过滤输入操作之htmlentities与htmlspecialchars用法分析
Feb 17 PHP
PHP检测数据类型的几种方法(总结)
Mar 04 PHP
PHP获取学生成绩的方法
Nov 17 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
mysql,mysqli,PDO的各自不同介绍
2012/09/19 PHP
php实现检查文章是否被百度收录
2015/01/27 PHP
PHP 7.0.2 正式版发布
2016/01/08 PHP
CI框架数据库查询之join用法分析
2016/05/18 PHP
Windows上php5.6操作mongodb数据库示例【配置、连接、获取实例】
2019/02/13 PHP
Laravel 修改默认日志文件名称和位置的例子
2019/10/17 PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
2019/12/12 PHP
filemanage功能中用到的common.js
2007/04/08 Javascript
Mootools 1.2教程 输入过滤第二部分(字符串)
2009/09/15 Javascript
asp.net下使用jquery 的ajax+WebService+json 实现无刷新取后台值的实现代码
2010/09/19 Javascript
javascript中日期转换成时间戳的小例子
2013/03/21 Javascript
Js Jquery创建一个弹出层可加载一个页面
2014/05/08 Javascript
Jquery 获取指定标签的对象及属性的设置与移除
2014/05/29 Javascript
JsRender for object语法简介
2014/10/31 Javascript
javascript中caller和callee详解
2015/08/10 Javascript
浅谈js数据类型判断与数组判断
2016/08/29 Javascript
利用select实现年月日三级联动的日期选择效果【推荐】
2016/12/13 Javascript
JS+CSS实现下拉刷新/上拉加载插件
2017/03/31 Javascript
解决AngualrJS页面刷新导致异常显示问题
2017/04/20 Javascript
Angular 2父子组件数据传递之局部变量获取子组件其他成员
2017/07/04 Javascript
如何选择适合你的JavaScript框架
2017/11/20 Javascript
vue-prop父组件向子组件进行传值的方法
2018/03/01 Javascript
vue单页面在微信下只能分享落地页的解决方案
2019/04/15 Javascript
微信小程序实现时间进度条功能
2020/11/17 Javascript
详解vue中v-on事件监听指令的基本用法
2020/07/22 Javascript
Python中使用asyncio 封装文件读写
2016/09/11 Python
Python如何获得百度统计API的数据并发送邮件示例代码
2019/01/27 Python
Python生成器实现简单&quot;生产者消费者&quot;模型代码实例
2020/03/27 Python
Python 没有main函数的原因
2020/07/10 Python
微信小程序实现可实时改变转速的css3旋转动画实例代码
2018/09/11 HTML / CSS
澳大利亚在线百货商店:Real Smart
2017/08/13 全球购物
高尔夫球鞋、服装、手套和装备:FootJoy
2018/12/15 全球购物
C,C++的几个面试题小集
2013/07/13 面试题
小学生操行评语
2014/04/22 职场文书
医院护士见习期自我鉴定
2014/09/15 职场文书
2015年工会工作总结范文
2015/07/23 职场文书