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 Smarty 字符比较代码
Feb 27 PHP
利用php绘制饼状图的实现代码
Jun 07 PHP
处理单名多值表单的详解
Jun 08 PHP
浅析php中如何在有限的内存中读取大文件
Jul 02 PHP
46 个非常有用的 PHP 代码片段
Feb 16 PHP
php blowfish加密解密算法
Jul 02 PHP
php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中
Dec 12 PHP
php使用自定义函数实现汉字分割替换功能示例
Jan 30 PHP
PHP使用zlib扩展实现GZIP压缩输出的方法详解
Apr 09 PHP
浅谈php调用python文件
Mar 29 PHP
在 PHP 和 Laravel 中使用 Traits的方法
Nov 13 PHP
Laravel实现批量更新多条数据
Apr 06 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 dirname()与__FILE__常量的应用
2013/06/24 PHP
php中get_meta_tags()、CURL与user-agent用法分析
2014/12/16 PHP
Mac OS下配置PHP+MySql环境
2015/02/25 PHP
thinkPHP分页功能实例详解
2017/05/05 PHP
利用PHPExcel读取Excel的数据和导出数据到Excel
2017/05/12 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
2020/02/23 PHP
jQuery Clone Bug解决代码
2010/12/22 Javascript
ASP.NET中基于JQUERY的高性能的TreeView补充
2011/02/23 Javascript
禁止你的左键复制实用技巧
2013/01/04 Javascript
JavaScript实现点击按钮后变灰避免多次重复提交
2013/07/15 Javascript
JS命名空间的另一种实现
2013/08/09 Javascript
JavaScript作用域与作用域链深入解析
2013/12/06 Javascript
js封装可使用的构造函数继承用法分析
2015/01/28 Javascript
利用jQuery实现漂亮的圆形进度条倒计时插件
2015/09/30 Javascript
jQuery中设置form表单中action值的实现方法
2016/05/25 Javascript
深入理解js中的加载事件
2017/02/08 Javascript
jquery实现全选、全不选以及单选功能
2017/03/23 jQuery
Vue.js render方法使用详解
2017/04/05 Javascript
vue项目关闭eslint校验
2018/03/21 Javascript
webpack@v4升级踩坑(小结)
2018/10/08 Javascript
NodeJS服务器实现gzip压缩的示例代码
2018/10/12 NodeJs
vuex 中插件的编写案例解析
2019/06/10 Javascript
vue实现吸顶、锚点和滚动高亮按钮效果
2019/10/21 Javascript
Vue+Node实现的商城用户管理功能示例
2019/12/23 Javascript
jQuery操作元素追加内容示例
2020/01/10 jQuery
[02:32]【DOTA2亚洲邀请赛】iceice,梦开始的地方
2017/03/13 DOTA
对python捕获ctrl+c手工中断程序的两种方法详解
2018/12/26 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
2019/02/12 Python
Algenist奥杰尼官网:微藻抗衰老护肤品牌
2017/07/15 全球购物
黑猩猩商店:The Chimp Store
2020/02/12 全球购物
教师专业自荐书范文
2014/02/10 职场文书
《春雨》教学反思
2014/04/24 职场文书
2015年端午节活动策划书
2015/05/05 职场文书
2015年感恩父亲节活动策划方案
2015/05/05 职场文书
幼儿园见习总结
2015/06/23 职场文书
二胎满月酒致辞
2015/07/29 职场文书