如果手機(jī)用戶 " /> www精品一区二区三区四区,中文字幕一区二区三区视频在线,在线观看国产日韩

一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

php實(shí)現(xiàn)的click captcha點(diǎn)擊驗(yàn)證碼類實(shí)例

本文實(shí)例講述了php實(shí)現(xiàn)的click captcha點(diǎn)擊驗(yàn)證碼類及其用法,是非常實(shí)用的功能。分享給大家供大家參考之用。具體如下:

一、需求:

現(xiàn)在常用的表單驗(yàn)證碼大部分都是要用戶輸入為主,但這樣對(duì)手機(jī)用戶會(huì)不方便。
如果手機(jī)用戶訪問,可以不用輸入,而是click某一位置便可確認(rèn)驗(yàn)證碼,這樣就會(huì)方便很多。

二、原理:

1.使用php imagecreate創(chuàng)建PNG圖象,在圖中畫N個(gè)圓弧,其中一個(gè)是完整的圓(驗(yàn)證用),將圓心坐標(biāo)及半徑記錄入session。

2.在瀏覽器,當(dāng)用戶在驗(yàn)證碼圖片上點(diǎn)擊時(shí),記錄點(diǎn)擊的位置。

3.將用戶點(diǎn)擊的坐標(biāo)與session記錄的圓心坐標(biāo)、半徑比較,判斷是否在圓中,如是則驗(yàn)證通過。

程序運(yùn)行效果如下圖所示:

三、實(shí)現(xiàn)方法:

ClickCaptcha.class.php類文件如下:

<?php /** Click Captcha 驗(yàn)證碼類 *  Date:  2013-05-04 *  Author: fdipzone *  Ver:  1.0 */  class ClickCaptcha { // class start    public $sess_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($sess_name=''){     if(session_id() == ''){       session_start();     }      if($sess_name!=''){       $this->sess_name = $sess_name; // 設(shè)置session name     }   }    /** 創(chuàng)建驗(yàn)證碼 */   public function create(){      // 創(chuàng)建圖象     $this->_img_res = imagecreate($this->width, $this->height);          // 填充背景     ImageColorAllocate($this->_img_res, $this->backgroundColor[0], $this->backgroundColor[1], $this->backgroundColor[2]);      // 分配顏色     $col_ellipse = 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_ellipse);           }      // 驗(yàn)證用圖象,完整的圓     $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_ellipse);          // 記錄圓心坐標(biāo)及半徑     $this->captcha_session($this->sess_name, array($x, $y, $r));      // 生成圖象     Header("Content-type: image/PNG");     ImagePNG($this->_img_res);     ImageDestroy($this->_img_res);      exit();   }    /** 檢查驗(yàn)證碼   * @param String $captcha 驗(yàn)證碼   * @param int  $flag   驗(yàn)證成功后 0:不清除session 1:清除session   * @return boolean   */   public function check($captcha, $flag=1){     if(trim($captcha)==''){       return false;     }          if(!is_array($this->captcha_session($this->sess_name))){       return false;     }      list($px, $py) = explode(',', $captcha);     list($cx, $cy, $cr) = $this->captcha_session($this->sess_name);      if(isset($px) && is_numeric($px) && isset($py) && is_numeric($py) &&        isset($cx) && is_numeric($cx) && isset($cy) && is_numeric($cy) && isset($cr) && is_numeric($cr)){       if($this->pointInArea($px,$py,$cx,$cy,$cr)){         if($flag==1){           $this->captcha_session($this->sess_name,'');         }         return true;       }     }     return false;   }    /** 判斷點(diǎn)是否在圓中   * @param int $px 點(diǎn)x   * @param int $py 點(diǎn)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;   }    /** 驗(yàn)證碼session處理方法   * @param  String  $name  captcha session name   * @param  String  $value   * @return String   */   private function captcha_session($name,$value=null){     if(isset($value)){       if($value!==''){         $_SESSION[$name] = $value;       }else{         unset($_SESSION[$name]);       }     }else{       return isset($_SESSION[$name])? $_SESSION[$name] : '';     }   } } // class end  ?> 

demo.php示例程序如下:

<?php session_start(); require('ClickCaptcha.class.php');  if(isset($_GET['get_captcha'])){ // get captcha   $obj = new ClickCaptcha();   $obj->create();   exit(); }  if(isset($_POST['send']) && $_POST['send']=='true'){ // submit   $name = isset($_POST['name'])? trim($_POST['name']) : '';   $captcha = isset($_POST['captcha'])? trim($_POST['captcha']) : '';    $obj = new ClickCaptcha();    if($obj->check($captcha)){     echo 'your name is:'.$name;   }else{     echo 'captcha not match';   }   echo ' <a href="demo.php">back</a>';  }else{ // html ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html>  <head>  <meta http-equiv="content-type" content="text/html; charset=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).offset().left;       var y = e.pageY - $(this).offset().top;       $('#captcha').val(x+','+y);     })      $('#btn').click(function(e){       if($.trim($('#name').val())==''){         alert('Please input name!');         return false;       }        if($.trim($('#captcha').val())==''){         alert('Please click captcha!');         return false;       }       $('#form1')[0].submit();     })   })  </script>  </head>   <body>   <form name="form1" id="form1" method="post" action="demo.php" onsubmit="return false">   <p>name:<input type="text" name="name" id="name"></p>   <p>Captcha:Please 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="send" value="true">   <input type="hidden" name="captcha" id="captcha">   </form>  </body> </html> <?php } ?> 

本文完整源碼點(diǎn)擊此處本站下載。

希望本文所述對(duì)大家的php程序設(shè)計(jì)有所幫助。

php技術(shù)php實(shí)現(xiàn)的click captcha點(diǎn)擊驗(yàn)證碼類實(shí)例,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 日本特级a禁片在线播放 | 国产精品久久久久久五月尺 | 丁香六月色婷婷 | 日本免费网站观看 | 亚洲精品在线不卡 | 国产亚洲婷婷香蕉久久精品 | 四虎精品永久在线 | 就色干综合 | 天天澡天天摸天天爽免费 | 深夜免费小视频 | 青青草人人 | 91精品国产免费网站 | 美国成人影院 | 国产乱了 | 婷婷激情片 | 好吊色在线 | 日韩欧美成人乱码一在线 | 真人一级毛片国产 | 真实乱视频国产免费观看 | 九九色视频 | 在线观看91精品国产hd | 亚洲精品tv久久久久久久久 | 视色视频在线 | 欧美精品亚洲精品日韩经典 | 久久久久青草大香线综合精品 | 一级毛片无遮挡免费全部 | 精品亚洲一区二区三区在线播放 | 老太婆性杂交欧美肥老太 | 天堂网站天堂小说 | 女人洗澡一级毛片一级毛片 | 亚洲第一综合网站 | 久久免费区一区二区三波多野 | 亚洲五月花丁香花社区 | 亚州一二区 | 欧美黄一级 | 国产精品亚洲综合网站 | 五月激情五月婷婷 | 亚洲一级特黄 | 免费二级c片在线观看a | 激情小说激情图片激情视频 | 天天色天天 |