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 相关文章推荐
set_include_path在win和linux下的区别
Jan 10 PHP
php下通过POST还是GET来传值
Jun 05 PHP
关于php程序报date()警告的处理(date_default_timezone_set)
Oct 22 PHP
PHP中Fatal error session_start()错误解决步骤
Aug 05 PHP
php导出CSV抽象类实例
Sep 24 PHP
php使用for语句输出三角形的方法
Jun 09 PHP
thinkPHP删除前弹出确认框的简单实现方法
May 16 PHP
实例分析基于PHP微信网页获取用户信息
Nov 24 PHP
PHP信号处理机制的操作代码讲解
Apr 19 PHP
解决laravel查询构造器中的别名问题
Oct 17 PHP
让whoops帮我们告别ThinkPHP6的异常页面
Mar 02 PHP
PHPstorm启用自动换行的方法详解(IDE)
Sep 17 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设计模式中工厂模式详细介绍
2013/05/15 PHP
php的4种常用运行方式详解
2016/12/22 PHP
laravel 实现登陆后返回登陆前的页面方法
2019/10/03 PHP
漂亮的提示信息(带箭头)
2007/03/21 Javascript
关于JavaScript的一些看法
2009/05/27 Javascript
深入理解JavaScript系列(27):设计模式之建造者模式详解
2015/03/03 Javascript
AngularJS基础学习笔记之控制器
2015/05/10 Javascript
Vue自定义指令拖拽功能示例
2017/02/17 Javascript
浅析vue深复制
2018/01/29 Javascript
过滤器vue.filters的使用方法实现
2019/09/18 Javascript
vuex刷新后数据丢失的解决方法
2020/10/18 Javascript
原生js实现自定义难度的扫雷游戏
2021/01/22 Javascript
从零学Python之入门(二)基本数据类型
2014/05/25 Python
Python实现的监测服务器硬盘使用率脚本分享
2014/11/07 Python
python使用xlrd实现检索excel中某列含有指定字符串记录的方法
2015/05/09 Python
python 实现删除文件或文件夹实例详解
2016/12/04 Python
用tensorflow实现弹性网络回归算法
2018/01/09 Python
对python中url参数编码与解码的实例详解
2019/07/25 Python
python标准库os库的函数介绍
2020/02/12 Python
Python实现寻找回文数字过程解析
2020/06/09 Python
Django mysqlclient安装和使用详解
2020/09/17 Python
NYX Professional Makeup英国官网:美国平价专业彩妆品牌
2019/11/13 全球购物
linux比较文件内容的命令是什么
2015/09/23 面试题
AJAX检测用户名是否存在的方法
2021/03/24 Javascript
公司新员工的演讲稿注意事项
2014/01/01 职场文书
个人对照检查材料
2014/02/12 职场文书
集团公司党的群众路线教育实践活动工作总结
2014/03/03 职场文书
通信工程专业求职信
2014/06/04 职场文书
2014年小学美术工作总结
2014/12/20 职场文书
产品调价通知函
2015/04/20 职场文书
2019旅游导游工作总结
2019/06/27 职场文书
golang中的空接口使用详解
2021/03/30 Python
MySQL时间盲注的五种延时方法实现
2021/05/18 MySQL
SpringMVC 整合SSM框架详解
2021/08/30 Java/Android
CI Games宣布《堕落之王2》使用虚幻引擎5制作 预计将于2023年正式发售
2022/04/11 其他游戏
MySQL如何修改字段类型和字段长度
2022/06/10 MySQL