首页 > 作文

php实现的click captcha点击验证码类实例

更新时间:2023-04-06 21:28:28 阅读: 评论:0

本文实例讲述高中家长会家长发言稿了php实现的click captcha点击验证码类及其用法,是非常实用的功能。分享给大家供大家参考之用。具体如下:

一、需求:

现在常用的表单验证码大部分都是要用户输入为主,但这样对手机用户会不方便。
如果手机用户访问,可以不用输入,而是click某一位置便可确认验证码,这样就会方便很多。

二、原理:

1.使用php imagecreate创建png图象,在图中画n个圆弧,其中一个是完整的圆(验证用),将圆心坐标及半径记录入ssion。

2.在浏览器,当用户在验证码图片上点击时,记录点击的位置。

3.将用户点击的坐标与ssion记录的圆心坐标、半径比较,判断是否在圆中,如是则验证通过。

程序运行效果如下图所示:

三、实现方法:

clickcaptcha.class.php类文件如下:

<?php /** click captcha 验证码类 *  date:  2013-05-04 *  author: fdipzone *  ver:  1.0 */  class clickcaptcha { // class start    public $ss_name = 'm_captcha';   public $width = 500;   public $height = 200;   public $icon = 5;   public $iconcolor = array(255, 255, 0);   public $backgroundcolor = array(0, 0, 0);   public $iconsize = 56;    private $_img_res = null;    public function __construct($ss_name=''){     if(ssion_id() == ''){       ssion_start();     }      if($ss_name!=''){       $this->ss_name = $ss_name; // 设置ssion name     }   }    /** 创建验证码 */   public function create(){      // 创建图象     $this->_img_res = imagecreate($this->width, $this->height);          // 填充背景     imagecolorallocate($this->_img_res, $this->backgroundcolor[0], $this->backgroundcolor[1], $this->backgroundcolor[2]);      // 分配颜色     $col_ellip = imagecolorallocate($this->_img_res, $this->iconcolor[0], $this->iconcolor[1], $this->iconcolor[2]);      $minarea = $this->iconsize/2+3;      // 混淆用图象,不完整的圆     for($i=0; $i<$this->icon; $i++){       $x = mt_rand($minarea, $this->width-$minarea);       $y = mt_rand($minarea, $this->height-$minarea);       $s = mt_rand(0, 360);       $e = $s + 330;       imagearc($this->_img_res, $x, $y, $this->iconsize, $this->iconsize, $s, $e, $col_ellip);           }      // 验证用图象,完整的圆     $x = mt_rand($minarea, $this->width-$minarea);     $y = mt_rand($minarea, $this->height-$minarea);     $r = $this->iconsize/2;     imagearc($this->_img_res, $x, $y, $this->iconsize, $this->iconsize, 0, 360, $col_ellip);    古代节日      // 记录圆心坐标及半径     $this->captcha_ssion($this->ss_name, array($x, $y, $r));      // 生成图象     header("content-type: image/png");     imagepng($this->_img_res);     imagedestroy($this->_img_res);      exit();   }    /** 检查验证码   * @param string $captcha 验证码   * @param int  $flag   验证成功后 0:不清除ssion 1:清除ssion   * @return boolean   */   public function check($captcha, $flag=1){     if(trim($captcha)==''){       return fal;     }          if(!is_array($this->captcha_ssion($this->ss_name))){       return fal;     }      list($px, $py) = e踩线xplode(',', $captcha);     list($cx, $cy, $cr) = $this->captcha_ssion($this->ss_name);      if(ist($px) && is_numeric($px) && ist($py) && is_numeric($py) &&        ist($cx) && is_numeric($cx) && ist($cy) && is_numeric($cy) && ist($cr) && is_numeric($cr)){       if($this->pointinarea($px,$py,$cx,$cy,$cr)){         if($flag==1){           $this->captcha_ssion($this->ss_name,'');         }         return true;       }     }     return fal;   }    /** 判断点是否在圆中   * @param int $px 点x   * @param int $py 点y   * @param int $cx 圆心x   * @param int $cy 圆心y   * @param int $cr 圆半径   * sqrt(x^2+y^2)<r   */   private function pointinarea($px, $py, $cx, $cy, $cr){     $x = $cx-$px;     $y = $cy-$py;     return round(sqrt($x*$x + $y*$y))<$cr;   }    /** 验证码ssion处理方法   * @param  string  $name  captcha ssion name   * @param  string  $value   * @return string   */   private function captcha_ssion($name,$value=null){     if(ist($value)){       if($value!==''){         $_ssion[$name] = $value;       }el{         unt($_s图片模块ession[$name]);       }     }el{       return ist($_ssion[$name])? $_ssion[$name] : '';     }   } } // class end  ?> 

demo.php示例程序如下:

<?php ssion_start(); require('clickcaptcha.class.php');  if(ist($_get['get_captcha'])){ // get captcha   $obj = new clickcaptcha();   $obj->create();   exit(); }  if(ist($_post['nd']) && $_post['nd']=='true'){ // submit   $name = ist($_post['name'])? trim($_post['name']) : '';   $captcha = ist($_post['captcha'])? trim($_post['captcha']) : '';    $obj = new clickcaptcha();    if($obj->check($captcha)){     echo 'your name is:'.$name;   }el{     echo 'captcha not match';   }   echo ' <a href="demo.php">back</a>';  }el{ // html ?> <!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3.org/tr/html4/loo.dtd"> <html>  <head>  <meta http-equiv="content-type" content="text/html; chart=utf-8">  <title> click captcha demo </title>  <script type="text/javascript" src="jquery-1.6.2.min.js"></script>  <script type="text/javascript">   $(function(){     $('#captcha_img').click(function(e){       var x = e.pagex - $(this).offt().left;       var y = e.pagey - $(this).offt().top;       $('#captcha').val(x+','+y);     })      $('#btn').click(function(e){       if($.trim($('#name').val())==''){         alert('plea input name!');         return fal;       }        if($.trim($('#captcha').val())==''){         alert('plea click captcha!');         return fal;       }       $('#form1')[0].submit();     })   })  </script>  </head>   <body>   <form name="form1" id="form1" method="ubuntu安装flashpost" action="demo.php" onsubmit="return fal">   <p>name:<input type="text" name="name" id="name"></p>   <p>captcha:plea click full circle<br><img id="captcha_img" src="demo.php?get_captcha=1&t=<?=time() ?>" style="cursor:pointer"></p>   <p><input type="submit" id="btn" value="submit"></p>   <input type="hidden" name="nd" value="true">   <input type="hidden" name="captcha" id="captcha">   </form>  </body> </html> <?php } ?> 

本文完整源码点击此处本站下载。

希望本文所述对大家的php程序设计有所帮助。

本文发布于:2023-04-06 21:28:26,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/cdb43d59a0730016a4ab4aebbe119dff.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:php实现的click captcha点击验证码类实例.doc

本文 PDF 下载地址:php实现的click captcha点击验证码类实例.pdf

标签:验证码   圆心   图象   半径
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图