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结合飞信 免费天气预报短信
May 07 PHP
php Sql Server连接失败问题及解决办法
Aug 07 PHP
PHP 判断变量类型实现代码
Oct 23 PHP
PHP取得一个类的属性和方法的实现代码
May 22 PHP
php在线代理转向代码
May 05 PHP
PHP return语句的另一个作用
Jul 30 PHP
使用GDB调试PHP代码,解决PHP代码死循环问题
Mar 02 PHP
php上传文件并显示上传进度的方法
Mar 24 PHP
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
Apr 11 PHP
php实现微信扫码自动登陆与注册功能
Sep 22 PHP
Laravel日志用法详解
Oct 09 PHP
PHP 断点续传实例详解
Nov 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设计模式之迭代器模式的深入解析
2013/06/13 PHP
使用php计算排列组合的方法
2013/11/13 PHP
WordPress中is_singular()函数简介
2015/02/05 PHP
PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法
2016/05/13 PHP
PHP学习笔记之session
2018/05/06 PHP
javascript实现根据时间段显示问候语的方法
2015/06/18 Javascript
js中flexible.js实现淘宝弹性布局方案
2020/06/23 Javascript
JavaScript中的原始值和复杂值
2016/01/07 Javascript
js实现人民币大写金额形式转换
2016/04/27 Javascript
JavaScript面试题大全(推荐)
2016/09/22 Javascript
基于JS递归函数细化认识及实用实例(推荐)
2017/08/07 Javascript
vue用addRoutes实现动态路由的示例
2017/09/15 Javascript
微信小程序云开发之使用云函数
2019/05/17 Javascript
微信小程序使用车牌号输入法的示例代码
2019/08/20 Javascript
js实现双人五子棋小游戏
2020/05/28 Javascript
python检测是文件还是目录的方法
2015/07/03 Python
Python实现多并发访问网站功能示例
2017/06/19 Python
python中利用Future对象回调别的函数示例代码
2017/09/07 Python
Tesserocr库的正确安装方式
2018/10/19 Python
python的xpath获取div标签内html内容,实现innerhtml功能的方法
2019/01/02 Python
python实现转圈打印矩阵
2019/03/02 Python
python ChainMap的使用和说明详解
2019/06/11 Python
python利用wx实现界面按钮和按钮监听和字体改变的方法
2019/07/17 Python
python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
2019/08/28 Python
Python进阶之迭代器与迭代器切片教程
2020/01/29 Python
Keras实现支持masking的Flatten层代码
2020/06/16 Python
软件测试工程师面试问题精选
2016/10/28 面试题
自荐信的格式
2014/03/10 职场文书
槐乡的孩子教学反思
2014/04/27 职场文书
道路交通事故赔偿协议书
2014/10/24 职场文书
优秀团队申报材料
2014/12/26 职场文书
先进工作者主要事迹材料
2015/11/03 职场文书
goland 设置project gopath的操作
2021/05/06 Golang
如何使用pdb进行Python调试
2021/06/30 Python
基于angular实现树形二级表格
2021/10/16 Javascript
MySQL中dd::columns表结构转table过程及应用详解
2022/09/23 MySQL