欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

php+js實(shí)現(xiàn)的拖動(dòng)滑塊驗(yàn)證碼驗(yàn)證表單操作示例【附源碼下載】

 更新時(shí)間:2025年08月20日 09:53:31   作者:下頁(yè)、再停留  
這篇文章主要介紹了php+js實(shí)現(xiàn)的拖動(dòng)滑塊驗(yàn)證碼驗(yàn)證表單操作,結(jié)合實(shí)例形式分析了php+js拖動(dòng)滑塊驗(yàn)證碼驗(yàn)證表單操作基本功能實(shí)現(xiàn)與使用相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了php+js實(shí)現(xiàn)的拖動(dòng)滑塊驗(yàn)證碼驗(yàn)證表單操作。分享給大家供大家參考,具體如下:

現(xiàn)在很多網(wǎng)站,比如淘寶,京東等都改用使用極驗(yàn)拖動(dòng)驗(yàn)證碼實(shí)現(xiàn)登錄,這種方式比傳統(tǒng)的驗(yàn)證碼方式有更好的體驗(yàn),減少用戶輸入的錯(cuò)誤,也同樣能起到防盜刷的功能。現(xiàn)在很多極驗(yàn)都是第三方的,也很多都是收費(fèi)的。今天在這里給大家分享自己用原生php實(shí)現(xiàn)的一個(gè)極驗(yàn)的代碼。用原生php的好處就是以后你要嵌套到什么框架,可以直接用核心代碼,改一改就好了。

極驗(yàn)拖動(dòng)動(dòng)畫(huà)圖

代碼文件截圖

代碼實(shí)現(xiàn)

html文件

<!DOCTYPE html>
<html lang="">
<head>
  <meta charset="utf-8">
  <meta http-equiv="x-ua-compatible" content="ie=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>極驗(yàn)滑塊拖動(dòng)驗(yàn)證碼-碼農(nóng)社區(qū)-web視頻分享網(wǎng)</title>
  <script type="text/javascript" src="tn_code.js?v=35"></script>
  <link rel="stylesheet" type="text/css" href="style.css?v=27" rel="external nofollow" />
<style type="text/css"></style>
</head>
<body style="text-align:center;">
<div class="tncode" style="text-align: center;margin: 100px auto;"></div>
<script type="text/javascript">
$TN.onsuccess(function(){
//驗(yàn)證通過(guò)
});
</script> 

php文件:check.php

<?php
require_once dirname(__FILE__).'/TnCode.class.php';
$tn = new TnCode();
if($tn->check()){
    $_SESSION['tncode_check'] = 'ok';
  echo "ok";
}else{
    $_SESSION['tncode_check'] = 'error';
  echo "error";
}

?>

主要核心文件:TnCode.class.php

<?php
class TnCode
{
  var $im = null;
  var $im_fullbg = null;
  var $im_bg = null;
  var $im_slide = null;
  var $bg_width = 240;
  var $bg_height = 150;
  var $mark_width = 50;
  var $mark_height = 50;
  var $bg_num = 6;
  var $_x = 0;
  var $_y = 0;
  //容錯(cuò)象素 越大體驗(yàn)越好,越小破解難道越高
  var $_fault = 3;
  function __construct(){
    //ini_set('display_errors','On');
    //
    error_reporting(0);
    if(!isset($_SESSION)){
      session_start();
    }
  }
  function make(){
    $this->_init();
    $this->_createSlide();
    $this->_createBg();
    $this->_merge();
    $this->_imgout();
    $this->_destroy();
  }

  function check($offset=''){
    if(!$_SESSION['tncode_r']){
      return false;
    }
    if(!$offset){
      $offset = $_REQUEST['tn_r'];
    }
    $ret = abs($_SESSION['tncode_r']-$offset)<=$this->_fault;
    if($ret){
      unset($_SESSION['tncode_r']);
    }else{
      $_SESSION['tncode_err']++;
      if($_SESSION['tncode_err']>10){//錯(cuò)誤10次必須刷新
        unset($_SESSION['tncode_r']);
      }
    }
    return $ret;
  }

  private function _init(){
    $bg = mt_rand(1,$this->bg_num);
    $file_bg = dirname(__FILE__).'/bg/'.$bg.'.png';
    $this->im_fullbg = imagecreatefrompng($file_bg);
    $this->im_bg = imagecreatetruecolor($this->bg_width, $this->bg_height);
    imagecopy($this->im_bg,$this->im_fullbg,0,0,0,0,$this->bg_width, $this->bg_height);
    $this->im_slide = imagecreatetruecolor($this->mark_width, $this->bg_height);
    $_SESSION['tncode_r'] = $this->_x = mt_rand(50,$this->bg_width-$this->mark_width-1);
    $_SESSION['tncode_err'] = 0;
    $this->_y = mt_rand(0,$this->bg_height-$this->mark_height-1);
  }

  private function _destroy(){
    imagedestroy($this->im);
    imagedestroy($this->im_fullbg);
    imagedestroy($this->im_bg);
    imagedestroy($this->im_slide);
  }
  private function _imgout(){
    if(!$_GET['nowebp']&&function_exists('imagewebp')){//優(yōu)先webp格式,超高壓縮率
      $type = 'webp';
      $quality = 40;//圖片質(zhì)量 0-100
    }else{
      $type = 'png';
      $quality = 7;//圖片質(zhì)量 0-9
    }
    header('Content-Type: image/'.$type);
    $func = "image".$type;
    $func($this->im,null,$quality);
  }
  private function _merge(){
    $this->im = imagecreatetruecolor($this->bg_width, $this->bg_height*3);
    imagecopy($this->im, $this->im_bg,0, 0 , 0, 0, $this->bg_width, $this->bg_height);
    imagecopy($this->im, $this->im_slide,0, $this->bg_height , 0, 0, $this->mark_width, $this->bg_height);
    imagecopy($this->im, $this->im_fullbg,0, $this->bg_height*2 , 0, 0, $this->bg_width, $this->bg_height);
    imagecolortransparent($this->im,0);//16777215
  }

  private function _createBg(){
    $file_mark = dirname(__FILE__).'/img/mark.png';
    $im = imagecreatefrompng($file_mark);
    header('Content-Type: image/png');
    //imagealphablending( $im, true);
    imagecolortransparent($im,0);//16777215
    //imagepng($im);exit;
    imagecopy($this->im_bg, $im, $this->_x, $this->_y , 0 , 0 , $this->mark_width, $this->mark_height);
    imagedestroy($im);
  }

  private function _createSlide(){
    $file_mark = dirname(__FILE__).'/img/mark2.png';
    $img_mark = imagecreatefrompng($file_mark);
    imagecopy($this->im_slide, $this->im_fullbg,0, $this->_y , $this->_x, $this->_y, $this->mark_width, $this->mark_height);
    imagecopy($this->im_slide, $img_mark,0, $this->_y , 0, 0, $this->mark_width, $this->mark_height);
    imagecolortransparent($this->im_slide,0);//16777215
    //header('Content-Type: image/png');
    //imagepng($this->im_slide);exit;
    imagedestroy($img_mark);
  }

}
?>

附:完整實(shí)例代碼點(diǎn)擊此處本站下載。

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP圖形與圖片操作技巧匯總》、《PHP數(shù)組(Array)操作技巧大全》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計(jì)算法總結(jié)》、《PHP數(shù)學(xué)運(yùn)算技巧總結(jié)》、《php字符串(string)用法總結(jié)》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總

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

相關(guān)文章

  • php 引用(&)詳解

    php 引用(&)詳解

    php的引用(就是在變量或者函數(shù)、對(duì)象等前面加上&符號(hào))
    2009-11-11
  • php實(shí)現(xiàn)統(tǒng)計(jì)網(wǎng)站在線人數(shù)的方法

    php實(shí)現(xiàn)統(tǒng)計(jì)網(wǎng)站在線人數(shù)的方法

    這篇文章主要介紹了php實(shí)現(xiàn)統(tǒng)計(jì)網(wǎng)站在線人數(shù)的方法,通過(guò)獲取服務(wù)器端網(wǎng)絡(luò)參數(shù)及文本文件讀寫(xiě)實(shí)現(xiàn)統(tǒng)計(jì)在線人數(shù)的功能,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下
    2015-05-05
  • PHP解析RuoYi框架實(shí)現(xiàn)Token解密詳解

    PHP解析RuoYi框架實(shí)現(xiàn)Token解密詳解

    這篇文章主要介紹了PHP解析RuoYi框架實(shí)現(xiàn)Token解密,同時(shí)本篇文章對(duì)RuoYi若依框架的使用進(jìn)行簡(jiǎn)單的介紹,它和php的fastadmin框架非常類似,是可以根據(jù)數(shù)據(jù)庫(kù)表自動(dòng)的生成一個(gè)完整的管理后臺(tái)
    2022-10-10
  • PHP按指定鍵值對(duì)二維數(shù)組進(jìn)行排序的方法

    PHP按指定鍵值對(duì)二維數(shù)組進(jìn)行排序的方法

    這篇文章主要介紹了PHP按指定鍵值對(duì)二維數(shù)組進(jìn)行排序的方法,涉及PHP二維數(shù)組的遍歷及array_multisort函數(shù)的使用技巧,需要的朋友可以參考下
    2015-12-12
  • php在linux下檢測(cè)mysql同步狀態(tài)的方法

    php在linux下檢測(cè)mysql同步狀態(tài)的方法

    這篇文章主要介紹了php在linux下檢測(cè)mysql同步狀態(tài)的方法,是Linux下使用php檢測(cè)mysql同步狀態(tài)的實(shí)用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-01-01
  • php中使用Imagick實(shí)現(xiàn)圖像直方圖的實(shí)現(xiàn)代碼

    php中使用Imagick實(shí)現(xiàn)圖像直方圖的實(shí)現(xiàn)代碼

    玩過(guò)單反相機(jī)的人應(yīng)該都知道圖像直方圖(Image Histogram),簡(jiǎn)單點(diǎn)說(shuō),它通過(guò)計(jì)算每個(gè)色階在總像素中所占的比例來(lái)反映圖像的曝光情況。
    2011-08-08
  • PHP IN_ARRAY 函數(shù)使用注意事項(xiàng)

    PHP IN_ARRAY 函數(shù)使用注意事項(xiàng)

    其實(shí)關(guān)鍵還是因?yàn)?php是弱類型語(yǔ)言,php進(jìn)行比較的時(shí)候 最好還是使用strict方法的。因?yàn)檫@樣不但比較兩者的值是否一直,還會(huì)比較兩者的類型是否一直。
    2010-07-07
  • PHP超級(jí)全局變量數(shù)組小結(jié)

    PHP超級(jí)全局變量數(shù)組小結(jié)

    PHP超級(jí)全局變量數(shù)組(Super Global Array),又稱為PHP預(yù)定義數(shù)組,是由PHP引擎內(nèi)置的,不需要開(kāi)發(fā)者重新定義。 在PHP腳本運(yùn)行時(shí),PHP會(huì)自動(dòng)將一些數(shù)據(jù)放在超級(jí)全局?jǐn)?shù)組中
    2012-10-10
  • php控制文件下載速度的方法

    php控制文件下載速度的方法

    這篇文章主要介紹了php控制文件下載速度的方法,實(shí)例分析了php操作文件的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • php設(shè)計(jì)模式之裝飾模式應(yīng)用案例詳解

    php設(shè)計(jì)模式之裝飾模式應(yīng)用案例詳解

    這篇文章主要介紹了php設(shè)計(jì)模式之裝飾模式,結(jié)合具體應(yīng)用案例形式詳細(xì)分析了php裝飾模式的概念、原理、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-06-06

最新評(píng)論