摘要:驗(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值對比)
如圖:
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
摘要:本項(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)式布局...
摘要:短信模板一短信模板管理在短信服務(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)生成的...
摘要:前言注冊時(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ù)...
摘要:短信模板一短信模板管理在短信服務(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)生成的...
閱讀 1224·2021-11-24 09:38
閱讀 3650·2021-11-22 15:32
閱讀 3518·2019-08-30 15:54
閱讀 2631·2019-08-30 15:53
閱讀 1551·2019-08-30 15:52
閱讀 2798·2019-08-30 13:15
閱讀 1907·2019-08-29 12:21
閱讀 1472·2019-08-26 18:36