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原理之异常机制
Aug 21 PHP
PHPCMS的使用小结
Sep 20 PHP
PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码
Aug 11 PHP
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
Jul 01 PHP
PHP环境搭建的详细步骤
Jun 30 PHP
详谈PHP面向对象中常用的关键字和魔术方法
Feb 04 PHP
PHP实现的堆排序算法详解
Aug 17 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
Oct 22 PHP
php实现二叉树中和为某一值的路径方法
Oct 14 PHP
PHP使用POP3读取邮箱接收邮件的示例代码
Jul 08 PHP
PHP时间类完整代码实例
Feb 26 PHP
PHP 技巧 * SVG 保存为图片(分享图生成)
Apr 02 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
搜索引擎技术核心揭密
2006/10/09 PHP
小偷PHP+Html+缓存
2006/12/20 PHP
php ImageMagick windows下安装教程
2015/01/26 PHP
详解PHP处理密码的几种方式
2016/11/30 PHP
QQ邮箱的一个文本编辑器代码
2007/03/14 Javascript
csdn 批量接受好友邀请
2009/02/19 Javascript
JavaScript 闭包深入理解(closure)
2009/05/27 Javascript
JavaScript 基于原型的对象(创建、调用)
2009/10/16 Javascript
jQuery前台数据获取实现代码
2011/03/16 Javascript
jQuery中调用WebService方法小结
2011/03/28 Javascript
模拟电子签章盖章效果的jQuery插件源码
2013/06/24 Javascript
使表格的标题列可左右拉伸jquery插件封装
2014/11/24 Javascript
IE下使用jQuery重置iframe地址时内存泄露问题解决办法
2015/02/05 Javascript
jquery渐隐渐显的图片幻灯闪烁切换实现方法
2015/02/26 Javascript
jQuery实现的调整表格行tr上下顺序
2016/01/10 Javascript
基于JavaScript实现在新的tab页打开url
2016/08/04 Javascript
微信小程序 欢迎界面开发的实例详解
2016/11/30 Javascript
Bootstrap Table使用整理(一)
2017/06/09 Javascript
在一般处理程序(ashx)中弹出js提示语
2017/08/16 Javascript
react-native android状态栏的实现
2018/06/15 Javascript
基于Vue+element-ui 的Table二次封装的实现
2018/07/20 Javascript
vue.js封装switch开关组件的操作
2020/10/26 Javascript
浅析vue中的nextTick
2020/12/28 Vue.js
详解ES6 中的Object.assign()的用法实例代码
2021/01/11 Javascript
vue3.0中使用element的完整步骤
2021/03/04 Vue.js
在Python中使用HTMLParser解析HTML的教程
2015/04/29 Python
浅谈Python 敏感词过滤的实现
2019/08/15 Python
QT5 Designer 打不开的问题及解决方法
2020/08/20 Python
Python的scikit-image模块实例讲解
2020/12/30 Python
Python列表的深复制和浅复制示例详解
2021/02/12 Python
布里斯班女装时尚品牌:Adrift
2017/12/28 全球购物
编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串
2014/01/07 面试题
会计助理的岗位职责
2013/11/29 职场文书
乡镇精神文明建设汇报材料
2014/08/15 职场文书
岗位职责范本大全
2015/02/26 职场文书
大学生军训心得体会5篇
2019/08/15 职场文书