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 数组排序方法总结 推荐收藏
Jun 30 PHP
yii操作cookie实例简介
Jul 09 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
Aug 08 PHP
PHP框架Laravel学习心得体会
Oct 28 PHP
php生成curl命令行的方法
Dec 14 PHP
PHP 数组基本操作方法详解
Jun 17 PHP
thinkPHP5 ACL用户权限模块用法详解
May 10 PHP
PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别分析
Jul 03 PHP
PHP新特性之字节码缓存和内置服务器
Aug 11 PHP
PHP设计模式之观察者模式定义与用法分析
Apr 04 PHP
Laravel使用Queue队列的技巧汇总
Sep 02 PHP
PHP安装扩展mcrypt以及相关依赖项深入讲解
Mar 04 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一些常用的正则表达式字符的一些转换
2008/07/29 PHP
php完全过滤HTML,JS,CSS等标签
2009/01/16 PHP
显示程序执行时间php函数代码
2013/08/29 PHP
wamp服务器访问php非常缓慢的解决过程
2015/07/01 PHP
javascript 表单验证常见正则
2009/09/28 Javascript
document节点对象的获取方式示例介绍
2013/12/24 Javascript
jquery实现表单验证并阻止非法提交
2015/07/09 Javascript
详解Nodejs之npm&amp;package.json
2017/06/15 NodeJs
JS 组件系列之BootstrapTable的treegrid功能
2017/06/16 Javascript
Angular.js中数组操作的方法教程
2017/07/31 Javascript
JavaScript实现开关等效果
2017/09/08 Javascript
vue iview实现动态路由和权限验证功能
2018/04/17 Javascript
jQuery实现的导航条点击后高亮显示功能示例
2019/03/04 jQuery
让 babel webpack vue 配置文件支持智能提示的方法
2019/06/22 Javascript
JS实现继承的几种常用方式示例
2019/06/22 Javascript
JavaScript回调函数callback用法解析
2020/01/14 Javascript
解决VUE mounted 钩子函数执行时 img 未加载导致页面布局的问题
2020/07/27 Javascript
Pyramid将models.py文件的内容分布到多个文件的方法
2013/11/27 Python
python对于requests的封装方法详解
2019/01/03 Python
详解Python字典的操作
2019/03/04 Python
python实现对输入的密文加密
2019/03/20 Python
Python 给屏幕打印信息加上颜色的实现方法
2019/04/24 Python
python pytest进阶之xunit fixture详解
2019/06/27 Python
python正则表达式匹配IP代码实例
2019/12/28 Python
Django中的session用法详解
2020/03/09 Python
Python  Asyncio模块实现的生产消费者模型的方法
2021/03/01 Python
联想香港官方网站及网店:Lenovo香港
2018/04/13 全球购物
会计自我鉴定范文
2013/10/06 职场文书
药学专业毕业生求职信
2013/10/20 职场文书
入党思想汇报
2014/01/05 职场文书
校园元旦活动总结
2014/07/09 职场文书
音乐教师个人工作总结
2015/02/06 职场文书
六一活动主持词
2015/06/30 职场文书
《自然之道》读后感3篇
2019/12/17 职场文书
nginx 防盗链防爬虫配置详解
2021/03/31 Servers
PostgreSQL逻辑复制解密原理解析
2022/09/23 PostgreSQL