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 相关文章推荐
E路文章系统PHP
Dec 11 PHP
PHP6 先修班 JSON实例代码
Aug 23 PHP
PHP 编写大型网站问题集
May 07 PHP
php对数组排序的简单实例
Dec 25 PHP
php教程之phpize使用方法
Feb 12 PHP
php获取网页上所有链接的方法
Apr 03 PHP
PHP实现递归复制整个文件夹的类实例
Aug 03 PHP
四个PHP非常实用的功能
Sep 29 PHP
通过PHP简单实例介绍文件上传
Dec 16 PHP
ThinkPHP实现更新数据实例详解(demo)
Jun 29 PHP
php有效防止图片盗用、盗链的两种方法
Nov 01 PHP
PHP批斗大会之缺失的异常详解
Jul 09 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 split汉字
2009/06/05 PHP
9个经典的PHP代码片段分享
2014/12/18 PHP
Thinkphp微信公众号支付接口
2016/08/04 PHP
PHP利用二叉堆实现TopK-算法的方法详解
2017/04/24 PHP
谷歌浏览器 insertCell与appendChild的区别
2009/02/12 Javascript
JavaScript弹簧振子超简洁版 完全符合能量守恒,胡克定理
2009/10/25 Javascript
Javascript 面向对象 继承
2010/05/13 Javascript
javascript文件加载管理简单实现方法
2015/07/25 Javascript
基于RequireJS和JQuery的模块化编程日常问题解析
2016/04/14 Javascript
超实用的JavaScript代码段 附使用方法
2016/05/22 Javascript
基于JS模仿windows文件按名称排序效果
2016/06/29 Javascript
AngularJS教程 ng-style 指令简单示例
2016/08/03 Javascript
浅析Ajax语法
2016/12/05 Javascript
JavaScript实现前端实时搜索功能
2020/03/26 Javascript
vue实现动态数据绑定
2017/04/28 Javascript
JavaScript多线程运行库Nexus.js详解
2017/12/22 Javascript
Vue 换肤的示例实践
2018/01/23 Javascript
浅谈用Webpack路径压缩图片上传尺寸获取的问题
2018/02/22 Javascript
详解Angular系列之变化检测(Change Detection)
2018/02/26 Javascript
vue页面离开后执行函数的实例
2018/03/13 Javascript
JS实现的对象去重功能示例
2019/06/04 Javascript
ant-design表单处理和常用方法及自定义验证操作
2020/10/27 Javascript
[06:07]DOTA2-DPC中国联赛 正赛 Ehome vs VG 选手采访
2021/03/11 DOTA
13个最常用的Python深度学习库介绍
2017/10/28 Python
Django框架模板介绍
2019/01/15 Python
从0开始的Python学习014面向对象编程(推荐)
2019/04/02 Python
基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)
2019/08/06 Python
python常用数据重复项处理方法
2019/11/22 Python
Keras中的两种模型:Sequential和Model用法
2020/06/27 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
2021/01/06 Python
CSS3制作彩色进度条样式的代码示例分享
2016/06/23 HTML / CSS
在线实验室测试:HealthLabs.com
2020/05/03 全球购物
大学生如何写自荐信
2014/01/08 职场文书
党的群众路线学习笔记
2014/11/06 职场文书
2016年公司新年寄语
2015/08/17 职场文书
毕业季聚会祝酒词!
2019/07/04 职场文书