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 相关文章推荐
PHP5中的时间相差8小时的解决办法
Mar 28 PHP
一步一步学习PHP(5) 类和对象
Feb 16 PHP
PHP扩展编写点滴 技巧收集
Mar 09 PHP
php 大数据量及海量数据处理算法总结
May 07 PHP
一个简单的PHP验证码实现代码
May 10 PHP
php实例分享之html转为rtf格式
Jun 02 PHP
php站内搜索关键词变亮的实现方法
Dec 30 PHP
php解析字符串里所有URL地址的方法
Apr 03 PHP
php快速排序原理与实现方法分析
May 26 PHP
PHP多进程之pcntl_fork的实例详解
Oct 15 PHP
php伪静态验证码不显示的解决方案
Sep 26 PHP
laravel5.5安装jwt-auth 生成token令牌的示例
Oct 24 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中Session的概念
2006/10/09 PHP
用php的ob_start来生成静态页面的方法分析
2011/03/09 PHP
php微信开发之关注事件
2018/06/14 PHP
Prototype Number对象 学习
2009/07/19 Javascript
基于jQuery的可以控制左右滚动及自动滚动效果的代码
2010/07/25 Javascript
jQuery中jqGrid分页实现代码
2011/11/04 Javascript
php显示当前文件所在的文件以及文件夹所有文件以树形展开
2013/12/13 Javascript
每天一篇javascript学习小结(Function对象)
2015/11/16 Javascript
js格式化输入框内金额、银行卡号
2016/02/01 Javascript
JS常用知识点整理
2017/01/21 Javascript
vue路由导航守卫和请求拦截以及基于node的token认证的方法
2019/04/07 Javascript
JQuery的加载和选择器用法简单示例
2019/05/13 jQuery
解决layui轮播图有数据不显示的情况
2019/09/16 Javascript
Node 代理访问的实现
2019/09/19 Javascript
vue路由切换时取消之前的所有请求操作
2020/09/01 Javascript
[00:03]DOTA2新版本PA至宝展示
2014/11/19 DOTA
Python使用Scrapy爬取妹子图
2015/05/28 Python
django使用html模板减少代码代码解析
2017/12/12 Python
对Python使用mfcc的两种方式详解
2019/01/09 Python
Python使用线程来接收串口数据的示例
2019/07/02 Python
python3中替换python2中cmp函数的实现
2019/08/20 Python
python 使用pdfminer3k 读取PDF文档的例子
2019/08/27 Python
python自动生成model文件过程详解
2019/11/02 Python
python科学计算之narray对象用法
2019/11/25 Python
python 在右键菜单中加入复制目标文件的有效存放路径(单斜杠或者双反斜杠)
2020/04/08 Python
Python中的全局变量如何理解
2020/06/04 Python
英国家庭、花园、汽车和移动解决方案:Easylife Group
2018/05/23 全球购物
会计专业毕业生自我鉴定
2013/10/29 职场文书
先进集体获奖感言
2014/02/13 职场文书
2014基建处领导班子“四风”对照检查材料思想汇报
2014/10/04 职场文书
民政局未婚证明
2015/06/15 职场文书
2015年工商局个人工作总结
2015/07/23 职场文书
读《瓦尔登湖》有感:每个人都需要一个瓦尔登湖
2019/10/17 职场文书
MySQL GRANT用户授权的实现
2021/06/18 MySQL
MySQL利用UNION连接2个查询排序失效详解
2021/11/20 MySQL
java获取一个文本文件的编码(格式)信息
2022/09/23 Java/Android