日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php面向对象(OOP)---- 验证码类

發布時間:2025/7/14 php 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php面向对象(OOP)---- 验证码类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

驗證碼是眾多網站登陸、注冊等相關功能不可以或缺的功能,實現展示驗證碼的方式有很多,這篇文章作者以工作中比較常用的方法進行了封裝。

邏輯準備

要實現一個完整的驗證碼,需要包含以下屬性和功能

驗證碼類 {屬性:寬度高度干擾點驗證碼(私有的)驗證碼字符的個數驗證碼的類型(純數字類型、純字母類型、混合類型)圖片類型(jpg、png、bmp……)圖片資源功能:構造函數(用來初始化)生成驗證碼的函數創建畫布填充背景色填充干擾點填充干擾弧線畫驗證碼輸出圖片 }

根據上面的邏輯,接下來我們就一步步將文字描述轉換為代碼

//創建一個名為Verify的驗證碼類 class Verify { /*定義驗證碼屬性 *///圖片的寬度public $width;//圖片的高度public $height;//私有化驗證碼字符串,避免生成后被修改 private $verifyCode;//存儲驗證碼字符的個數public $verifyNums;//存儲驗證碼的字符類型 1->純數字 2->純字母 3->混合類public $verifyType;//背景顏色public $bgColor;//文字顏色public $fontColor;//驗證碼的圖片類型jpg,png,bmp……public $imgType;//圖片資源private $res;/*功能*///功能函數,初始化一些可以被初始化的參數public function __construct($width = 100,$height = 50,$imgType = 'jpg',$verifyNums = 4,$verifyType = 1){$this->width = $width;$this->height = $height;$this->imgType = $imgType;$this->verifyNums = $verifyNums;$this->verifyType = $verifyType;//初始化一個可以隨機生成驗證碼的函數,將生成的驗證碼春初到verifyCode屬性里$this->verifyCode = $this->createVerifyCode(); }//隨機生成驗證碼的函數,因為不對外公布,設置為私有的private function createVerifyCode(){//通過判斷驗證的類型來確定生成哪一種驗證碼//verifyType=1生成純數字,為2生成純字母,為3生成混合switch ($this->verifyType) {case 1:/*生成純數字,首先使用range(0,9)生成數組*通過$this->verifyNums確定字符串的個數*使用array_rand()從數組中隨機獲取相應個數*使用join將數字拼接成字符串,存儲到$str中*/$str = join('',array_rand(range(0,9),$this->verifyNums));break;case 2:/*生成純字母,*小寫字母數組range('a','z')*大寫字母數組range('A','Z')*合并兩個數組array_merge()*更換鍵和值 array_filp()*隨機獲取數組中的特定個數的元素 array_rand()*拼接成字符串 implode()*/$str = implode(array_rand(array_filp(array_merge(range('a','z'),range('A','Z'))),$this->verifyNums));break;case 3://混合類型$words = str_shuffle('abcdefghjkmpopqrstuvwxyABCDEFGHIJKLMNPQRSTUVWXY3456789');$str = substr($words,0,this->verifyNums);break;}return $str;}//開始準備生成圖片/*方法名:show()*功能 :調用生成圖片的所有方法*/public function show(){$this->createImg();//創建圖片資源$this->fillBg(); //填充背景顏色$this->fillPix(); //填充干擾點$this->fillArc(); //填充干擾弧線$this->writeFont();//寫字$this->outPutImg();//輸出圖片}//創建圖片資源:imagecreatetruecolor($width,$height)private function createImg(){$this->res = imagecreatetruecolor($this->width,$this->height);}//填充背景顏色:imagefill($res,$x,$y,$color)//隨機生成深色--->imagecolorallocate($res,$r,$g,$b)private function setDarkColor(){return imagecolorallocate($this->res,mt_rand(130,255),mt_rand(130,255),mt_rand(130,255));} //隨機生成淺色private function setLightColor(){return imagecolorallocate($this->res,mt_rand(0,130),mt_rand(0,130),mt_rand(0,130));}//開始填充private function fillBg{imagefill($this->res,0,0$this->setDarkColor());}//隨機生成干擾點-->imagesetpixelprivate function fillPix(){//計算產生多少個干擾點,這里設置每20個像素產生一個$num = ceil(($this->width * $this->height) / 20);for($i = 0; $i < $num; $i++){imagesetpixel($this->res,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->res,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->verifyNums);for($i = 0;$i < $this->verifyNums;$i++){$x = mt_rand(($every * $i) + 5,$every * ($i + 1) - 5);$y = mt_rand(5,$this->height - 10);imagechar($this->res,6,$x,$y,$this->verifyCode[$i],$this->setLightColor());}}//輸出圖片資源private function outPutImg(){//header('Content-type:image/圖片類型')header('Content-type:image/'.$this->imgType);//根據圖片類型,調用不同的方法輸出圖片 //imagepng($img)/imagejpg($img)$func = 'image'.$this->imgType;$func($this->res);}//設置驗證碼字符只能調用,不能修改,用來驗證驗證碼書否輸入正確public function __get($name){if($name = 'verifyCode'){return $this->verifyCode;}}//析構方法,自動銷毀圖片資源public function __destruct(){imagedestroy($this->res);} }

致此,驗證碼函數類已經全部完成,調用方法如下

// Verify(寬,高,類型,個數,類型) // 數字類型 $verify = new Verify(100,40,'png',4,1); //生成 $verify->show();

//字母類型 $verify = new Verify(100,40,'png',4,2); $verify->show();

//混合類型 $verify = new Verify(100,40,'png',4,3); $verify->show();

類中的關于創建畫布的函數不明白的自行查詢PHP手冊

關于匹配驗證碼,通過$this->verifyCode獲取到字符串的值,進而進行比較


歡迎關注微信公眾號:zhyunfe-com,共同交流

轉載于:https://www.cnblogs.com/zhyunfe/p/6382850.html

總結

以上是生活随笔為你收集整理的php面向对象(OOP)---- 验证码类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。