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面向对象全攻略 (七) 继承性
Sep 30 PHP
php 需要掌握的东西 不做浮躁的人
Dec 28 PHP
php下把数组保存为文件格式的实例应用
Feb 08 PHP
根据中文裁减字符串函数的php代码
Dec 03 PHP
微信公众号开发之微信公共平台消息回复类实例
Nov 14 PHP
php提交过来的数据生成为txt文件
Apr 28 PHP
[原创]smarty简单模板变量输出方法
Jul 09 PHP
PHP中类属性与类静态变量的访问方法示例
Jul 13 PHP
php array_values 返回数组的值实例详解
Nov 17 PHP
PHP输出XML格式数据的方法总结
Feb 08 PHP
PHP环形链表实现方法示例
Sep 15 PHP
php实现将数据做成json的格式给前端使用
Aug 21 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
PHP4引用文件语句的对比
2006/10/09 PHP
php socket实现的聊天室代码分享
2014/08/16 PHP
浅谈PHP中Stream(流)
2015/06/08 PHP
PHP简单处理表单输入的特殊字符的方法
2016/02/03 PHP
实例讲解PHP中使用命名空间
2019/01/27 PHP
使用Nodejs开发微信公众号后台服务实例
2014/09/03 NodeJs
2014年最火的Node.JS后端框架推荐
2014/10/27 Javascript
不到30行JS代码实现Excel表格的方法
2014/11/15 Javascript
Jquery 实现checkbox全选方法
2015/01/28 Javascript
JavaScript使用slice函数获取数组部分元素的方法
2015/04/06 Javascript
详细介绍jQuery.outerWidth() 函数具体用法
2015/07/20 Javascript
Jquery ajax基础教程
2015/11/20 Javascript
js仿3366小游戏选字游戏
2016/04/14 Javascript
Google Maps基础及实例解析
2016/08/06 Javascript
d3.js中冷门却实用的内置函数总结
2017/02/04 Javascript
js定时器实现倒计时效果
2017/11/05 Javascript
JS排序算法之冒泡排序,选择排序与插入排序实例分析
2017/12/13 Javascript
微信小程序实现MUI数字输入框效果
2018/01/31 Javascript
浅谈React组件之性能优化
2018/03/02 Javascript
新版vue-cli模板下本地开发环境使用node服务器跨域的方法
2018/04/03 Javascript
基于Node.js的大文件分片上传示例
2019/06/19 Javascript
jquery弹窗时禁止body滚动条滚动的例子
2019/09/21 jQuery
js判断复选框是否选中的方法示例【基于jQuery】
2019/10/10 jQuery
javascript实现简易计算器功能
2020/09/23 Javascript
举例详解Python中循环语句的嵌套使用
2015/05/14 Python
python SMTP实现发送带附件电子邮件
2018/05/22 Python
pandas将numpy数组写入到csv的实例
2018/07/04 Python
解决python给列表里添加字典时被最后一个覆盖的问题
2019/01/21 Python
python数据类型可变不可变知识点总结
2020/03/06 Python
pycharm如何设置官方中文(如何汉化)
2020/12/29 Python
HTML5 manifest离线缓存的示例代码
2018/08/08 HTML / CSS
路德维希•贝克(LUDWIG BECK)中文官网:德国大型美妆百货
2020/09/19 全球购物
带薪年假请假条
2014/02/04 职场文书
餐厅楼面部长岗位职责范文
2014/02/16 职场文书
2015年安全生产管理工作总结
2015/05/25 职场文书
关于React Native使用axios进行网络请求的方法
2021/08/02 Javascript