摘要:驗證碼是什么驗證碼是自動區分計算機和人類的圖靈測試的縮寫,是一種區分用戶是計算機和人的全自動程序。驗證碼的種類文字數字字母統稱字符圖片語音手勢對于不同的驗證碼,驗證的設計思路是一致的,我們以字符為例。
概述
說明謝謝大家的收藏與贊,這是對我最大的鼓勵。
這一系列文章主要是一些PHP常用的類操作,回顧一下面向對象,我一直致力于小白文章的撰寫,因為我也是小白,相信有人需要,希望讀者能夠喜歡。
關于PHP語言實現各種操作類,網上都能夠找得到,但是質量參差不齊,有的代碼不好懂,有時候看的眼花繚亂,所以我在這里統一作了一個整理(注意:是整理,每一種操作類,我至少會參考三份優秀代碼,然后自己跑出來,而不是CV)
我會盡量遵守PSR規范,會有很詳細易懂的注釋
對于其中涉及到的相關知識點,比如設計模式,類型檢測、瀏覽器架構、通信數據我也會簡單講講,并留下相關鏈接,希望讀者能夠細嚼慢咽
閱讀準備內容涉及面向對象、數據庫、文件操作、購物車、分頁、圖像處理、JSON數據接口,你可能需要有一點知識基礎,當然,這些內容都是獨立的,可以選擇性的參看。
為什么要驗證碼?盡管現在很多業務是直接通過短信驗證用戶身份,但是還是有許多場景和使用習慣需要用到驗證碼;另外, 在登錄網站時,為了提高網站的安全性,屏蔽機器請求,避免用戶”灌水“等行為,經常需要輸入各種各樣的驗證碼。
驗證碼是什么?驗證碼是自動區分計算機和人類的圖靈測試的縮寫,是一種區分用戶是計算機和人的全自動程序。
驗證碼的種類?文字、數字、字母(統稱字符)
圖片
語音
手勢
對于不同的驗證碼,驗證的設計思路是一致的,我們以字符為例。
驗證設計1.服務器生成驗證碼異步傳輸到HTML頁面 2.服務器將生成的驗證碼放入session 3.HTML表單提交 4.后臺匹配(將表單值與session值對比)
如圖:
width = $w; $this->height = $h; $this->numbers = $n; $this->imageType = $imageType; $this->codeType = $codeType; /* 生成隨機的驗證字符串 */ $this->codeString = $this->createCode($this->codeType); $this->show(); } private function createCode($type){ switch($type){ case 1: /*生成純數字,首先使用range(0,9)生成數組 *通過$this->verifyNums確定字符串的個數 *使用array_rand()從數組中隨機獲取相應個數 *使用join將數字拼接成字符串,存儲到$this->codeString中 */ $this->codeString = join("",array_rand(range(0, 9),$this->numbers)); break; case 2: /*生成純字母, *小寫字母數組range("a","z") *大寫字母數組range("A","Z") *合并兩個數組array_merge() *更換鍵和值 array_filp() *隨機獲取數組中的特定個數的元素 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; } //開始準備生成圖片 /*方法名:show() *功能 :調用生成圖片的所有方法 */ private function show(){ $this->createImg();//創建圖片資源 $this->fillBackground(); //填充背景顏色 $this->fillPix(); //填充干擾點 $this->fillArc(); //填充干擾弧線 $this->writeFont();//寫字 $this->outPutImg();//輸出圖片 } //創建圖片資源:imagecreatetruecolor($width,$height) private function createImg(){ $this->resource = imagecreatetruecolor($this->width,$this->height); } //填充背景顏色:imagefill($res,$x,$y,$color) //隨機生成深色--->imagecolorallocate($res,$r,$g,$b) private function setDarkColor() { return imagecolorallocate($this->resource,mt_rand(130,255),mt_rand(130,255),mt_rand(130,255)); } //隨機生成淺色 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()); } //隨機生成干擾點-->imagesetpixel private function fillPix() { //計算產生多少個干擾點(單一像素),這里設置每20個像素產生一個 $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()); } } //隨機畫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()); } } /*在畫布上寫文字 *根據字符的個數,將畫布橫向分成相應的塊 $every = ceil($this->width/$this->verifyNums); *每一個小塊的隨機位置畫上對應的字符 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); //根據圖片類型,調用不同的方法輸出圖片 //imagepng($img)/imagejpg($img) $func = "image".$this->imageType; $func($this->resource); } //設置驗證碼字符只能調用,不能修改,用來驗證驗證碼是否輸入正確 public function __get($name){ if($name = "codeString"){ return $this->codeString; } } //析構方法,自動銷毀圖片資源 public function __destruct() { imagedestroy($this->resource); } } //new Code;
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30682.html
摘要:本項目發布在實驗樓,分為四部分內容前端頁面制作,驗證碼制作,實現注冊登陸,功能完善。全部章節及代碼詳解可以在實驗樓中在線完成實現用戶注冊登錄功能驗證碼制作一實驗簡介本次實驗將會帶領大家使用面向對象的思想封裝一個驗證碼類。 項目簡介:本課程通過使用 PHP 及 Web 前端技術實現一個網站注冊登錄入口頁面,學習并實踐 PHP 編程,GD庫,MySQL 擴展,Bootstrap 響應式布局...
摘要:短信模板一短信模板管理在短信服務的國內短信頁短信模板頁,默認展示當前項目下申請過的各短信模板,主要信息包括短信模板由系統生成的短信模板,當有短信模板相關問題或咨詢服務時,您可同時提交該號,將加速處理進展模板類型根據您的短信用途,區分為驗證碼短信模板一、短信模板管理在短信服務USMS的國內短信頁/短信模板Tab頁,默認展示當前項目下、申請過的各短信模板,主要信息包括:短信模板ID:由系統生成的...
摘要:前言注冊時經常需要用到短信驗證碼,本文記錄一下思路和具體實現。短信驗證平臺使用云片,短信驗證碼的生成使用。云片發送短信驗證碼到指定手機號。用戶輸入短信驗證碼。 前言 注冊時經常需要用到短信驗證碼,本文記錄一下思路和具體實現。短信驗證平臺使用云片,短信驗證碼的生成使用thinkphp。 思路 1、用戶輸入手機號,請求獲取短信驗證碼。2、thinkphp生成短信驗證碼,存儲,同時和其他參數...
摘要:短信模板一短信模板管理在短信服務的國內短信頁短信模板頁,默認展示當前項目下申請過的各短信模板,主要信息包括短信模板由系統生成的短信模板,當有短信模板相關問題或咨詢服務時,您可同時提交該號,將加速處理進展模板類型根據您的短信用途,區分為驗證碼短信模板一、短信模板管理在短信服務USMS的國內短信頁/短信模板Tab頁,默認展示當前項目下、申請過的各短信模板,主要信息包括:短信模板ID:由系統生成的...
閱讀 1155·2021-11-24 09:38
閱讀 3603·2021-11-22 15:32
閱讀 3457·2019-08-30 15:54
閱讀 2567·2019-08-30 15:53
閱讀 1493·2019-08-30 15:52
閱讀 2495·2019-08-30 13:15
閱讀 1836·2019-08-29 12:21
閱讀 1394·2019-08-26 18:36