亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

PHP常用操作類實(shí)現(xiàn)——驗(yàn)證碼類

Jrain / 2016人閱讀

摘要:驗(yàn)證碼是什么驗(yàn)證碼是自動區(qū)分計(jì)算機(jī)和人類的圖靈測試的縮寫,是一種區(qū)分用戶是計(jì)算機(jī)和人的全自動程序。驗(yàn)證碼的種類文字?jǐn)?shù)字字母統(tǒng)稱字符圖片語音手勢對于不同的驗(yàn)證碼,驗(yàn)證的設(shè)計(jì)思路是一致的,我們以字符為例。

概述

謝謝大家的收藏與贊,這是對我最大的鼓勵(lì)。

這一系列文章主要是一些PHP常用的類操作,回顧一下面向?qū)ο螅乙恢敝铝τ谛“孜恼碌淖珜?,因?yàn)槲乙彩切“?,相信有人需要,希望讀者能夠喜歡。

說明

關(guān)于PHP語言實(shí)現(xiàn)各種操作類,網(wǎng)上都能夠找得到,但是質(zhì)量參差不齊,有的代碼不好懂,有時(shí)候看的眼花繚亂,所以我在這里統(tǒng)一作了一個(gè)整理(注意:是整理,每一種操作類,我至少會參考三份優(yōu)秀代碼,然后自己跑出來,而不是CV)

我會盡量遵守PSR規(guī)范,會有很詳細(xì)易懂的注釋

對于其中涉及到的相關(guān)知識點(diǎn),比如設(shè)計(jì)模式,類型檢測、瀏覽器架構(gòu)、通信數(shù)據(jù)我也會簡單講講,并留下相關(guān)鏈接,希望讀者能夠細(xì)嚼慢咽

閱讀準(zhǔn)備

內(nèi)容涉及面向?qū)ο蟆?shù)據(jù)庫、文件操作、購物車、分頁、圖像處理、JSON數(shù)據(jù)接口,你可能需要有一點(diǎn)知識基礎(chǔ),當(dāng)然,這些內(nèi)容都是獨(dú)立的,可以選擇性的參看。

為什么要驗(yàn)證碼?

盡管現(xiàn)在很多業(yè)務(wù)是直接通過短信驗(yàn)證用戶身份,但是還是有許多場景和使用習(xí)慣需要用到驗(yàn)證碼;另外, 在登錄網(wǎng)站時(shí),為了提高網(wǎng)站的安全性,屏蔽機(jī)器請求,避免用戶”灌水“等行為,經(jīng)常需要輸入各種各樣的驗(yàn)證碼。

驗(yàn)證碼是什么?

驗(yàn)證碼是自動區(qū)分計(jì)算機(jī)和人類的圖靈測試的縮寫,是一種區(qū)分用戶是計(jì)算機(jī)和人的全自動程序。

驗(yàn)證碼的種類?

文字、數(shù)字、字母(統(tǒng)稱字符)
圖片
語音
手勢

對于不同的驗(yàn)證碼,驗(yàn)證的設(shè)計(jì)思路是一致的,我們以字符為例。

驗(yàn)證設(shè)計(jì)
1.服務(wù)器生成驗(yàn)證碼異步傳輸?shù)紿TML頁面
2.服務(wù)器將生成的驗(yàn)證碼放入session
3.HTML表單提交
4.后臺匹配(將表單值與session值對比)

如圖:

Source Code
width = $w;
            $this->height = $h;
            $this->numbers = $n;
            $this->imageType = $imageType;
            $this->codeType = $codeType;

            /*    生成隨機(jī)的驗(yàn)證字符串    */
            $this->codeString = $this->createCode($this->codeType);
            $this->show();
        }

        private function createCode($type){
            switch($type){
                case 1:
                     /*生成純數(shù)字,首先使用range(0,9)生成數(shù)組
                       *通過$this->verifyNums確定字符串的個(gè)數(shù)
                       *使用array_rand()從數(shù)組中隨機(jī)獲取相應(yīng)個(gè)數(shù)
                       *使用join將數(shù)字拼接成字符串,存儲到$this->codeString中
                      */
                    $this->codeString = join("",array_rand(range(0, 9),$this->numbers));
                    break;
                case 2:
                    /*生成純字母,
                       *小寫字母數(shù)組range("a","z")
                       *大寫字母數(shù)組range("A","Z")
                       *合并兩個(gè)數(shù)組array_merge()
                       *更換鍵和值  array_filp()
                       *隨機(jī)獲取數(shù)組中的特定個(gè)數(shù)的元素 array_rand()
                       *拼接成字符串 implode()
                    */
                    $this->codeString = implode(array_rand(array_filp(array_merge(range("a","z"),range("A","Z"))),$this->numbers));
                case 3:
                    //混合類型
                    $words = str_shuffle("abcdefghjkmpopqrstuvwxyABCDEFGHIJKLMNPQRSTUVWXY3456789");
                    $this->codeString = substr($words,0,$this->numbers);
                    break;
            }
            return $this->codeString;
        }


        //開始準(zhǔn)備生成圖片
        /*方法名:show()
         *功能  :調(diào)用生成圖片的所有方法
         */
        private function show(){
            $this->createImg();//創(chuàng)建圖片資源
            $this->fillBackground();   //填充背景顏色
            $this->fillPix();  //填充干擾點(diǎn)
            $this->fillArc();  //填充干擾弧線
            $this->writeFont();//寫字
            $this->outPutImg();//輸出圖片
        }
      
        //創(chuàng)建圖片資源:imagecreatetruecolor($width,$height)
        private function createImg(){
               $this->resource = imagecreatetruecolor($this->width,$this->height);
         }
      
        //填充背景顏色:imagefill($res,$x,$y,$color)
        //隨機(jī)生成深色--->imagecolorallocate($res,$r,$g,$b)
        private function setDarkColor()
          {
            return imagecolorallocate($this->resource,mt_rand(130,255),mt_rand(130,255),mt_rand(130,255));
          } 
        //隨機(jī)生成淺色
        private function setLightColor()
          {
            return imagecolorallocate($this->resource,mt_rand(0,130),mt_rand(0,130),mt_rand(0,130));
          }
        //開始填充
        private function fillBackground()
          {
            imagefill($this->resource,0,0,$this->setDarkColor());
          }
      
        //隨機(jī)生成干擾點(diǎn)-->imagesetpixel
        private function fillPix()
          {
            //計(jì)算產(chǎn)生多少個(gè)干擾點(diǎn)(單一像素),這里設(shè)置每20個(gè)像素產(chǎn)生一個(gè)
            $num = ceil(($this->width * $this->height) / 20);
            for($i = 0; $i < $num; $i++){
              imagesetpixel($this->resource,mt_rand(0,$this->width),mt_rand(0,$this->height),$this->setDarkColor());
            }
          }
      
        //隨機(jī)畫10條弧線->imagearc()
        private function fillArc()
          {
            for($i = 0;$i < 10;$i++){
              imagearc($this->resource,
                       mt_rand(10,$this->width-10),
                       mt_rand(5,$this->height-5),
                       mt_rand(0,$this->width),
                       mt_rand(0,$this->height),
                       mt_rand(0,180),
                       mt_rand(181,360),
                       $this->setDarkColor());
            }
          }
      

        /*在畫布上寫文字
         *根據(jù)字符的個(gè)數(shù),將畫布橫向分成相應(yīng)的塊
          $every = ceil($this->width/$this->verifyNums);
         *每一個(gè)小塊的隨機(jī)位置畫上對應(yīng)的字符
          imagechar();
         */
        
        private function writeFont()
          {
            $every = ceil($this->width / $this->numbers);
            for($i = 0;$i < $this->numbers;$i++){
              $x = mt_rand(($every * $i) + 5,$every * ($i + 1) - 5);
              $y = mt_rand(5,$this->height - 10);
              
              imagechar($this->resource,6,$x,$y,$this->codeString[$i],$this->setLightColor());
            }
          }
      
        //輸出圖片資源
        private function outPutImg()
          {
            //header("Content-type:image/圖片類型")
            header("Content-type:image/".$this->imageType);
          
            //根據(jù)圖片類型,調(diào)用不同的方法輸出圖片            
            //imagepng($img)/imagejpg($img)
            $func = "image".$this->imageType;
            $func($this->resource);
          }
      
        //設(shè)置驗(yàn)證碼字符只能調(diào)用,不能修改,用來驗(yàn)證驗(yàn)證碼是否輸入正確
        public function __get($name){
          if($name = "codeString"){
            return $this->codeString;
          }
        }
        
        //析構(gòu)方法,自動銷毀圖片資源
        public function __destruct()
          {
            imagedestroy($this->resource);
          }

    }




//new Code;

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/30682.html

相關(guān)文章

  • PHP 實(shí)現(xiàn)用戶注冊登錄功能

    摘要:本項(xiàng)目發(fā)布在實(shí)驗(yàn)樓,分為四部分內(nèi)容前端頁面制作,驗(yàn)證碼制作,實(shí)現(xiàn)注冊登陸,功能完善。全部章節(jié)及代碼詳解可以在實(shí)驗(yàn)樓中在線完成實(shí)現(xiàn)用戶注冊登錄功能驗(yàn)證碼制作一實(shí)驗(yàn)簡介本次實(shí)驗(yàn)將會帶領(lǐng)大家使用面向?qū)ο蟮乃枷敕庋b一個(gè)驗(yàn)證碼類。 項(xiàng)目簡介:本課程通過使用 PHP 及 Web 前端技術(shù)實(shí)現(xiàn)一個(gè)網(wǎng)站注冊登錄入口頁面,學(xué)習(xí)并實(shí)踐 PHP 編程,GD庫,MySQL 擴(kuò)展,Bootstrap 響應(yīng)式布局...

    crelaber 評論0 收藏0
  • 小型版php框架

    摘要:項(xiàng)目源碼地址鏈接地址簡單版框架特點(diǎn)單入口采用面向?qū)ο笏枷?,基于設(shè)計(jì)思想,使用觀察者,注冊器,工廠,代理,特性等模式開發(fā)。提供一些常用類圖片分頁文件上傳驗(yàn)證碼等。提供常用的插件文件壓縮合并觀察等。基于通過數(shù)組下標(biāo)訪問配置文件。 項(xiàng)目源碼地址 鏈接地址(https://github.com/cxp1539/mi... Framework 簡單版php框架 Framework特點(diǎn) 單入口i...

    1treeS 評論0 收藏0
  • 【短信服務(wù) USMS】操作指南:國內(nèi)短信模板管理與發(fā)送記錄

    摘要:短信模板一短信模板管理在短信服務(wù)的國內(nèi)短信頁短信模板頁,默認(rèn)展示當(dāng)前項(xiàng)目下申請過的各短信模板,主要信息包括短信模板由系統(tǒng)生成的短信模板,當(dāng)有短信模板相關(guān)問題或咨詢服務(wù)時(shí),您可同時(shí)提交該號,將加速處理進(jìn)展模板類型根據(jù)您的短信用途,區(qū)分為驗(yàn)證碼短信模板一、短信模板管理在短信服務(wù)USMS的國內(nèi)短信頁/短信模板Tab頁,默認(rèn)展示當(dāng)前項(xiàng)目下、申請過的各短信模板,主要信息包括:短信模板ID:由系統(tǒng)生成的...

    Tecode 評論0 收藏0
  • thinkphp實(shí)現(xiàn)短信驗(yàn)證注冊

    摘要:前言注冊時(shí)經(jīng)常需要用到短信驗(yàn)證碼,本文記錄一下思路和具體實(shí)現(xiàn)。短信驗(yàn)證平臺使用云片,短信驗(yàn)證碼的生成使用。云片發(fā)送短信驗(yàn)證碼到指定手機(jī)號。用戶輸入短信驗(yàn)證碼。 前言 注冊時(shí)經(jīng)常需要用到短信驗(yàn)證碼,本文記錄一下思路和具體實(shí)現(xiàn)。短信驗(yàn)證平臺使用云片,短信驗(yàn)證碼的生成使用thinkphp。 思路 1、用戶輸入手機(jī)號,請求獲取短信驗(yàn)證碼。2、thinkphp生成短信驗(yàn)證碼,存儲,同時(shí)和其他參數(shù)...

    stackfing 評論0 收藏0
  • 【短信服務(wù) USMS】國際短信操作指南:短信模板與發(fā)送記錄

    摘要:短信模板一短信模板管理在短信服務(wù)的國內(nèi)短信頁短信模板頁,默認(rèn)展示當(dāng)前項(xiàng)目下申請過的各短信模板,主要信息包括短信模板由系統(tǒng)生成的短信模板,當(dāng)有短信模板相關(guān)問題或咨詢服務(wù)時(shí),您可同時(shí)提交該號,將加速處理進(jìn)展模板類型根據(jù)您的短信用途,區(qū)分為驗(yàn)證碼短信模板一、短信模板管理在短信服務(wù)USMS的國內(nèi)短信頁/短信模板Tab頁,默認(rèn)展示當(dāng)前項(xiàng)目下、申請過的各短信模板,主要信息包括:短信模板ID:由系統(tǒng)生成的...

    Tecode 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<