PHP   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了php实现的click captcha点击验证码类实例大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

本文实例讲述了@L_675_0@实现的click captcha点击验证码类及其用法,是非常实用的功能。@L_874_3@给大家供大家参之用。具体如下:

一、需求:

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

二、原理:

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

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

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

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

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

三、实现方法

ClickCaptcha.class.@L_675_0@类文件如下:

php;">

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);
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; // 设置session 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_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,$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,360,$col_ellipsE);     

// 记录圆心坐标及半径 
$this->captcha_session($this->sess_name,array($x,$r)); 

// <a href="http://code.js-code.com/tag/shengcheng/" target="_blank" class="keywords">生成</a>图象 
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,$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,$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

?>

大佬总结

以上是大佬教程为你收集整理的php实现的click captcha点击验证码类实例全部内容,希望文章能够帮你解决php实现的click captcha点击验证码类实例所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。