最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php實現(xiàn)的click captcha點擊驗證碼類實例

 更新時間:2014年09月23日 09:55:52   投稿:shichen2014  
這篇文章主要介紹了php實現(xiàn)的click captcha點擊驗證碼類實例,不同于以往傳統(tǒng)的驗證碼,該驗證碼類可實現(xiàn)手機(jī)用戶點擊某一位置確認(rèn)驗證碼,非常實用,需要的朋友可以參考下

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

一、需求:

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

二、原理:

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

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

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

程序運行效果如下圖所示:

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

ClickCaptcha.class.php類文件如下:

<?php 
/** Click Captcha 驗證碼類 
*  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)建驗證碼 */ 
  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);       
    } 
 
    // 驗證用圖象,完整的圓 
    $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(); 
  } 
 
  /** 檢查驗證碼 
  * @param String $captcha 驗證碼 
  * @param int  $flag   驗證成功后 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; 
  } 
 
  /** 判斷點是否在圓中 
  * @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; 
  } 
 
  /** 驗證碼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 } ?> 

本文完整源碼點擊此處本站下載。

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

相關(guān)文章

  • php寫入txt亂碼的解決方法

    php寫入txt亂碼的解決方法

    在本篇文章里小編給大家分享的是關(guān)于php寫入txt亂碼的知識點以及解決方法,有需要的朋友們參考下。
    2019-09-09
  • php微信開發(fā)自定義菜單

    php微信開發(fā)自定義菜單

    這篇文章主要為大家詳細(xì)介紹了php微信開發(fā)自定義菜單,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • PHP常用的排序和查找算法

    PHP常用的排序和查找算法

    這篇文章主要介紹了PHP四種基本排序算法和兩種查找算法示例,本文用一個實例講解冒泡排序法、快速排序法、選擇排序法、插入排序法的使用,需要的朋友可以參考下
    2015-08-08
  • 六個步驟,從零開始教你搭建基于WordPress的個人博客

    六個步驟,從零開始教你搭建基于WordPress的個人博客

    這篇文章主要介紹了六個步驟,從零開始教你搭建基于WordPress的個人博客,步驟講解的很清楚,不知道如何搭建wordpress的同學(xué)可以跟著搭建下
    2021-01-01
  • php語法技巧代碼實例

    php語法技巧代碼實例

    這篇文章主要介紹了php語法技巧代碼實例,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,有感興趣的同學(xué)可以看一下
    2021-01-01
  • php實現(xiàn)基于openssl的加密解密方法

    php實現(xiàn)基于openssl的加密解密方法

    這篇文章主要介紹了php實現(xiàn)基于openssl的加密解密方法,結(jié)合實例形式分析了php自定義函數(shù)實現(xiàn)基于openssl的加密解密操作相關(guān)技巧,需要的朋友可以參考下
    2016-09-09
  • PHP實現(xiàn)的封裝驗證碼類詳解

    PHP實現(xiàn)的封裝驗證碼類詳解

    本篇文章是對PHP實現(xiàn)的封裝驗證碼類進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • Thinkphp中的curd應(yīng)用實用要點

    Thinkphp中的curd應(yīng)用實用要點

    這篇文章主要介紹了Thinkphp中的curd應(yīng)用實用要點并附上了簡單的示例,是篇非常不錯的文章,這里推薦給大家。
    2015-01-01
  • 用php實現(xiàn)讓頁面只能被百度gogole蜘蛛訪問的方法

    用php實現(xiàn)讓頁面只能被百度gogole蜘蛛訪問的方法

    用php實現(xiàn)讓頁面只能被百度gogole蜘蛛訪問的方法,需要的朋友可以參考下。
    2009-12-12
  • php數(shù)組鍵名技巧小結(jié)

    php數(shù)組鍵名技巧小結(jié)

    這篇文章主要介紹了php數(shù)組鍵名技巧小結(jié),分析了php數(shù)組鍵名常見的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02

最新評論

商都县| 长顺县| 合水县| 平凉市| 辰溪县| 大冶市| 四平市| 大庆市| 肥西县| 周至县| 潞西市| 绥江县| 昭通市| 武鸣县| 玉林市| 孝昌县| 普格县| 石城县| 东乌珠穆沁旗| 福安市| 荆州市| 青铜峡市| 哈巴河县| 志丹县| 南靖县| 西贡区| 新昌县| 曲麻莱县| 汶川县| 富川| 那坡县| 道真| 河曲县| 沙坪坝区| 新巴尔虎左旗| 张家口市| 新泰市| 博白县| 京山县| 双桥区| 兴宁市|