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 相关文章推荐
第五节--克隆
Nov 16 PHP
eWebEditor v3.8 商业完整版 (PHP)
Dec 06 PHP
10个可以简化php开发过程的MySQL工具
Apr 11 PHP
PHP 基于文件头的文件类型验证类函数
May 01 PHP
php异常处理技术,顶级异常处理器
Jun 13 PHP
完美解决PHP中的Cannot modify header information 问题
Aug 12 PHP
简单的php缓存类分享     php缓存机制
Jan 22 PHP
PHP计算加权平均数的方法
Jul 16 PHP
使用PHP编写发红包程序
Jul 22 PHP
WordPress开发中用于获取近期文章的PHP函数使用解析
Jan 05 PHP
详解PHP序列化和反序列化原理
Jan 15 PHP
PHP设计模式(三)建造者模式Builder实例详解【创建型】
May 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
咖啡知识 除了喝咖啡还有那些知识点
2021/03/06 新手入门
新版PHP将向Java靠拢
2006/10/09 PHP
PHP配置文件中最常用四个ini函数
2007/03/19 PHP
jquery插件之easing使用
2010/08/19 Javascript
jsp js鼠标移动到指定区域显示选项卡离开时隐藏示例
2013/06/14 Javascript
javascript检查浏览器是否已经启用XX功能
2015/07/10 Javascript
jQuery实现漂亮实用的商品图片tips提示框效果(无图片箭头+阴影)
2016/04/16 Javascript
使用webpack-dev-server处理跨域请求的方法
2018/04/18 Javascript
解决Vue中mounted钩子函数获取节点高度出错问题
2018/05/18 Javascript
纯JS实现的读取excel文件内容功能示例【支持所有浏览器】
2018/06/23 Javascript
electron + vue项目实现打印小票功能及实现代码
2018/11/25 Javascript
浅谈react-router@4.0 使用方法和源码分析
2019/06/04 Javascript
如何提升vue.js中大型数据的性能
2019/06/21 Javascript
微信小程序在线客服自动回复功能(基于node)
2019/07/03 Javascript
小程序实现录音上传功能
2019/11/22 Javascript
vue-property-decorator用法详解
2019/12/12 Javascript
Typescript3.9 常用新特性一览(推荐)
2020/05/14 Javascript
使用JavaScript实现网页秒表功能(含开始、暂停、继续、重置功能)
2020/06/05 Javascript
一起来了解一下JavaScript的预编译(小结)
2021/03/01 Javascript
[01:10:03]OG vs EG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
python中类的一些方法分析
2014/09/25 Python
Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
2016/05/28 Python
pip安装py_zipkin时提示的SSL问题对应
2018/12/29 Python
Keras 切换后端方式(Theano和TensorFlow)
2020/06/19 Python
Python利用命名空间解析XML文档
2020/08/10 Python
如何基于Python实现word文档重新排版
2020/09/29 Python
celery在python爬虫中定时操作实例讲解
2020/11/27 Python
皮尔·卡丹巴西官方商店:Pierre Cardin
2017/07/21 全球购物
印度低票价航空公司:GoAir
2017/10/11 全球购物
德国在线购买葡萄酒网站:Geile Weine
2019/09/24 全球购物
国际商务系学生个人的自我评价
2013/11/26 职场文书
检察官就职演讲稿
2014/01/13 职场文书
捐资助学感谢信
2015/01/21 职场文书
运动会通讯稿600字
2015/07/20 职场文书
redis调用二维码时的不断刷新排查分析
2022/04/01 Redis
win11无法添加打印机怎么办? 提示windows无法打开添加打印机的解决办法
2022/04/05 数码科技