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 相关文章推荐
8个出色的WordPress SEO插件收集
Feb 26 PHP
php 数组排序 array_multisort与uasort的区别
Mar 24 PHP
PHP下利用shell后台运行PHP脚本,并获取该脚本的Process ID的代码
Sep 19 PHP
php Xdebug的安装与使用详解
Jun 20 PHP
php加密解密实用类分享
Jan 07 PHP
PHP制作万年历
Jan 07 PHP
PHP使用NuSOAP调用Web服务的方法
Jul 18 PHP
PHP操作mysql数据库分表的方法
Jun 09 PHP
php根据用户名和手机号查询是否存在手机号码
Feb 16 PHP
PHP批量删除jQuery操作
Jul 23 PHP
PHP批量删除jQuery操作
Jul 23 PHP
php防止表单重复提交实例讲解
Feb 11 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
CodeIgniter生成网站sitemap地图的方法
2013/11/13 PHP
PHP调用MySQL存储过程并返回值的方法
2014/12/26 PHP
php实现两个数组相加的方法
2015/02/17 PHP
php中 $$str 中 &quot;$$&quot; 的详解
2015/07/06 PHP
Yii2下点击验证码的切换实例代码
2017/03/14 PHP
Nginx实现反向代理
2017/09/20 Servers
PHP排序算法之基数排序(Radix Sort)实例详解
2018/04/21 PHP
使用js判断控件是否获得焦点
2014/01/03 Javascript
js转化毫秒为时间格式代码
2014/04/10 Javascript
教你如何使用firebug调试功能了解javascript闭包和this
2015/03/04 Javascript
javascript异步处理工作机制详解
2015/04/13 Javascript
BootStrap Typeahead自动补全插件实例代码
2016/08/10 Javascript
微信小程序 wxapp画布 canvas详细介绍
2016/10/31 Javascript
Angular2-primeNG文件上传模块FileUpload使用详解
2017/01/14 Javascript
bootstrap table 多选框分页保留示例代码
2017/03/08 Javascript
jQuery实现基本淡入淡出效果的方法详解
2018/09/05 jQuery
学习jQuery中的noConflict()用法
2018/09/28 jQuery
jQuery操作cookie的示例代码
2019/06/05 jQuery
vue视频播放暂停代码
2019/11/08 Javascript
JS基础之逻辑结构与循环操作示例
2020/01/19 Javascript
浅谈es6中的元编程
2020/12/01 Javascript
vue 使用rules对表单字段进行校验的步骤
2020/12/25 Vue.js
Python使用re模块实现信息筛选的方法
2018/04/29 Python
Pytorch 多维数组运算过程的索引处理方式
2019/12/27 Python
python批量替换文件名中的共同字符实例
2020/03/05 Python
tensorflow dataset.shuffle、dataset.batch、dataset.repeat顺序区别详解
2020/06/03 Python
图解Python中深浅copy(通俗易懂)
2020/09/03 Python
CSS 3.0文字悬停跳动特效代码
2020/10/26 HTML / CSS
基于HTML5的WebGL实现json和echarts图表展现在同一个界面
2017/10/26 HTML / CSS
迪卡侬波兰体育用品商店:Decathlon波兰
2020/03/31 全球购物
医学专业毕业生推荐信
2013/11/14 职场文书
七年级作文之《我和我的祖国》观后感作文
2019/10/18 职场文书
Django 实现jwt认证的示例
2021/04/30 Python
Redis入门教程详解
2021/08/30 Redis
Vue+TypeScript中处理computed方式
2022/04/02 Vue.js
使用Python开发贪吃蛇游戏 SnakeGame
2022/04/30 Python