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 相关文章推荐
VML绘图板②脚本--VMLgraph.js、XMLtool.js
Oct 09 PHP
15种PHP Encoder的比较
Apr 17 PHP
php 服务器调试 Zend Debugger 的安装教程
Sep 25 PHP
php 获取客户端的真实ip
Nov 30 PHP
PHP函数常用用法小结
Feb 08 PHP
PHP获取用户的浏览器与操作系统信息的代码
Sep 04 PHP
php代码中使用换行及(\n或\r\n和br)的应用
Feb 02 PHP
php判断输入是否是纯数字,英文,汉字的方法
Mar 05 PHP
php多重接口的实现方法
Jun 20 PHP
PHP身份证校验码计算方法
Aug 10 PHP
php ajax数据传输和响应方法
Aug 21 PHP
PHP如何开启Opcache功能提升程序处理效率
Apr 27 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编程实现阳历转换为阴历的方法实例
2017/08/08 PHP
js类的静态属性和实例属性的理解
2009/10/01 Javascript
JS获取dom 对象 ajax操作 读写cookie函数
2009/11/18 Javascript
上传文件返回的json数据会被提示下载问题解决方案
2014/12/03 Javascript
JavaScript动态加载样式表的方法
2015/03/21 Javascript
javascript+canvas实现刮刮卡抽奖效果
2015/07/29 Javascript
简单实现js页面切换功能
2021/01/10 Javascript
jQuery通过ajax方法获取json数据不执行success的原因及解决方法
2016/10/15 Javascript
微信小程序 获取相册照片实例详解
2016/11/16 Javascript
js实现导航栏中英文切换效果
2017/01/16 Javascript
JS组件系列之MVVM组件 vue 30分钟搞定前端增删改查
2017/04/28 Javascript
JS闭包经典实例详解
2018/12/20 Javascript
python用ConfigObj读写配置文件的实现代码
2013/03/04 Python
python测试驱动开发实例
2014/10/08 Python
python3使用urllib模块制作网络爬虫
2016/04/08 Python
Python2.7版os.path.isdir中文路径返回false的解决方法
2019/06/21 Python
anaconda中更改python版本的方法步骤
2019/07/14 Python
python异常触发及自定义异常类解析
2019/08/06 Python
python获取Pandas列名的几种方法
2019/08/07 Python
python @classmethod 的使用场合详解
2019/08/23 Python
一文解决django 2.2与mysql兼容性问题
2020/07/15 Python
python 合并多个excel中同名的sheet
2021/01/22 Python
利用SVG和CSS3来实现一个炫酷的边框动画
2015/07/22 HTML / CSS
Philosophy美国官网:美国美容品牌
2016/08/15 全球购物
盖尔斯工厂店:GUESS Factory
2020/01/21 全球购物
简述DNS进行域名解析的过程
2013/12/02 面试题
MYSQL相比于其他数据库有哪些特点
2013/07/19 面试题
小学生元旦广播稿
2014/02/21 职场文书
工商干部先进事迹
2014/05/14 职场文书
党员作风建设自查报告
2014/10/23 职场文书
2014年团总支工作总结
2014/11/21 职场文书
2014年初三班主任工作总结
2014/12/05 职场文书
幼师自荐信范文
2015/03/06 职场文书
2015年幼儿园大班工作总结
2015/04/25 职场文书
PostgreSQL事务回卷实战案例详析
2022/03/25 PostgreSQL
类和原型的设计模式之复制与委托差异
2022/07/07 Javascript