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类中Static方法效率测试代码
Oct 17 PHP
php静态文件生成类实例分析
Jan 03 PHP
Ubuntu中搭建Nginx、PHP环境最简单的方法
Mar 05 PHP
浅谈json_encode用法
Mar 05 PHP
PHP.ini安全配置检测工具pcc简单介绍
Jul 02 PHP
2款PHP无限级分类实例代码
Nov 11 PHP
php性能分析之php-fpm慢执行日志slow log用法浅析
Oct 17 PHP
Laravel 5.4.36中session没有保存成功问题的解决
Feb 19 PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
Jul 31 PHP
PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作详解
Jun 14 PHP
PHP基于phpqrcode类生成二维码的方法示例详解
Aug 07 PHP
PHP7 foreach() 函数修改
Mar 09 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脚本的10个技巧(7)
2006/10/09 PHP
php下使用SimpleXML 处理XML 文件
2010/02/27 PHP
php实现图片添加描边字和马赛克的方法
2014/12/10 PHP
PHP遍历数组的三种方法及效率对比分析
2015/02/12 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
2017/02/05 PHP
JS backgroundImage控制
2009/05/19 Javascript
原生JS实现加入收藏夹的代码
2013/10/24 Javascript
jquery实现九宫格大转盘抽奖
2015/11/13 Javascript
基于javascript实现九九乘法表
2016/03/27 Javascript
Struts2+jquery.form.js实现图片与文件上传的方法
2016/05/05 Javascript
JSON 必知必会 观后记
2016/10/27 Javascript
jQuery实现三级联动效果
2017/03/02 Javascript
bootstrap实现的自适应页面简单应用示例
2017/03/09 Javascript
JS中把函数作为另一函数的参数传递方法(总结)
2017/06/28 Javascript
Vue 2.0学习笔记之Vue中的computed属性
2017/10/16 Javascript
移动端效果之IndexList详解
2017/10/20 Javascript
javascript中的event loop事件循环详解
2018/12/14 Javascript
js的各种数据类型判断的介绍
2019/01/19 Javascript
JS如何监听div的resize事件详解
2020/12/03 Javascript
HTML元素拖拽功能实现的完整实例
2020/12/04 Javascript
利用Tkinter和matplotlib两种方式画饼状图的实例
2017/11/06 Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
2018/06/19 Python
Python多线程threading模块用法实例分析
2019/05/22 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
2019/06/04 Python
Python中的pathlib.Path为什么不继承str详解
2019/06/23 Python
Python爬虫爬取煎蛋网图片代码实例
2019/12/16 Python
使用tensorboard可视化loss和acc的实例
2020/01/21 Python
Python 列表中的修改、添加和删除元素的实现
2020/06/11 Python
Python pip 常用命令汇总
2020/10/19 Python
大韩航空官方网站:Korean Air
2017/10/25 全球购物
JustFab加拿大:女鞋、靴子、手袋和服装在线
2018/05/18 全球购物
Hunter Boots美国官方网站:赫特威灵顿雨靴
2018/06/16 全球购物
会计系中文个人求职信
2013/12/24 职场文书
超详细教你怎么升级Mysql的版本
2021/05/19 MySQL
python库sklearn常用操作
2021/08/23 Python
MYSQL优化之数据表碎片整理详解
2022/04/03 MySQL