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中操作Excel实例代码
Apr 29 PHP
php编写一个简单的路由类
Apr 13 PHP
nginx+php-fpm配置文件的组织结构介绍
Nov 07 PHP
解析PHP可变函数的经典用法
Jun 20 PHP
PHP COOKIE及时生效的方法介绍
Feb 14 PHP
phpQuery让php处理html代码像jQuery一样方便
Jan 06 PHP
PHP上传图片时判断上传文件是否为可用图片的方法
Oct 20 PHP
Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册
Dec 27 PHP
Laravel实现表单提交
May 07 PHP
Laravel5框架添加自定义辅助函数的方法
Aug 01 PHP
PHP 文件上传限制问题
Sep 01 PHP
Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()
Oct 23 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
Mysql中limit的用法方法详解与注意事项
2008/04/19 PHP
php中去除所有js,html,css代码
2010/10/12 PHP
带密匙的php加密解密示例分享
2014/01/29 PHP
ThinkPHP3.1新特性之内容解析输出详解
2014/06/19 PHP
PHP判断是否为空的几个函数对比
2015/04/21 PHP
PHP使用mysql与mysqli连接Mysql数据库用法示例
2016/07/07 PHP
PHP+Session防止表单重复提交的解决方法
2018/04/09 PHP
PHP DB 数据库连接类定义与用法示例
2019/03/11 PHP
JSON扫盲帖 JSON.as类教程
2009/02/16 Javascript
javascript 实现字符串反转的三种方法
2013/11/23 Javascript
js取值中form.all和不加all的区别介绍
2014/01/20 Javascript
javascript操纵OGNL标签示例代码
2014/06/16 Javascript
JavaScript检查某个function是否是原生代码的方法
2014/08/20 Javascript
Javascript aop(面向切面编程)之around(环绕)分析
2015/05/01 Javascript
JavaScript forEach()遍历函数使用及介绍
2015/07/08 Javascript
基于ES6 Array.of的用法(实例讲解)
2017/09/05 Javascript
JavaScript判断变量名是否存在数组中的实例
2017/12/28 Javascript
Vue代码整洁之去重方法整理
2019/08/06 Javascript
如何利用node.js开发一个生成逐帧动画的小工具
2019/12/01 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
解决element-ui里的下拉多选框 el-select 时,默认值不可删除问题
2020/08/14 Javascript
Python使用ftplib实现简易FTP客户端的方法
2015/06/03 Python
Python实现以时间换空间的缓存替换算法
2016/02/19 Python
Python爬虫:将headers请求头字符串转为字典的方法
2019/08/21 Python
python matplotlib:plt.scatter() 大小和颜色参数详解
2020/04/14 Python
python中导入 train_test_split提示错误的解决
2020/06/19 Python
使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比)
2020/06/30 Python
pycharm中使用request和Pytest进行接口测试的方法
2020/07/31 Python
来自南加州灵感的工作和娱乐服装:TravisMathew
2019/05/01 全球购物
国贸专业个人求职信分享
2013/12/04 职场文书
工程技术员岗位职责
2014/03/02 职场文书
国庆促销活动总结
2014/08/29 职场文书
2014年无财产无子女离婚协议书范本
2014/10/09 职场文书
2014年设计师工作总结
2014/11/25 职场文书
企业承诺书格式范文
2015/04/28 职场文书
关于MySQL中explain工具的使用
2023/05/08 MySQL