php實作封裝的驗證碼類
本文給大家分享的是一個php封裝的驗證碼類別的程式碼和原理及思路,非常的清晰詳細,有需要的小夥伴可以參考下
驗證碼是我們開發的時候經常用到的功能,所以在此本人包裝了一個驗證碼類,應該可以作為php的類插件用,在此分享給各位讀友。
實現的原理也是很簡單,就是利用畫布的幾個函數,再加上一些字串的獲取,東湊西湊就構成了,呵呵。
這裡大概寫一下思路吧,其實這個類已經註釋的非常清楚了,不過,個人還是在行文前囉嗦一下。
首先是關於一些函數的解釋,這裡的解釋純屬個人體會,有什麼錯誤的地方,還請讀者指正。
1、建立畫布函數:imagecreatetruecolor(w,h);
說明:用於建立一個畫布。
w 畫布的寬
h 畫布的高
此函數的返回值資源類(gd)
2、為畫布創建一種顏色:imagecolorallocate(img,red,green,blue)
說明:
img畫布資源
img畫布資源
合 〔25045 範圍
3、為畫布添加背景色imagefill(img,x,y,color);
# # 在image 圖像的座標x,y(圖像左上角為0, 0)
4、畫邊框
imagerectangle($img,
## imagerectangle($img,##]x2 ,y2,color);
說明:
其左上角座標為x1, y1,右下角座標為x2, y2。圖像的左上角座標為 0, 0。
3、繪製內容(字元)imagestring(img ,size,x,y,string,color);
說明:
img畫布
size是字大小1至5
x,y是起始點
x,y是起始點
受畫# 是顏色
4、告訴瀏覽器圖片格式header("Content-type:image/png");可為image/gif等等
5、輸出(或儲存),也可以使用第2個參數實作儲存imagepng(img【,filename】)
聚,filename】)
imagegif(img【,filename】)
6、加入乾擾線,本質就是直線imageline(img imageline( ,y1,x2,y2,color);
說明:
img 畫布
終點
color 顏色
7、imagettftext ( img,size, angle, x, y, color, fontfile,text )
# img 畫布 size 字體大小,缺省單位像素 color 顏色 fontfile字型文件,必須是中文字體 text 內容 特別說明:這裡的color參數都是imagecolorallocate()函數創建的顏色##
這裡最先生成畫布,之後就是為畫布添加字符串,直線,噪點,邊框,來生成驗證碼的,最後類返回的兩個公用接口是:可供外面調用的生成驗證碼的畫布和驗證碼的字串構成,為的是給外界輸出驗證碼畫布,以及儲存字串,作為驗證用 下面是程式碼:<?php namespace captcha; /* *验证码类 *verify方法生成验证码字符串 *entry方法生成验证码 *特别提醒:这里要先用entry生成验证码,再用verify生成验证码的字符串,也就是必须先调用entry,然后才能够调用verify生成验证码的字符串,原因代码已经说明问题了,因为验证码的字符串是在entry方法调用captchaImage生成的,所以必须先调用它才行 *有的地方对中文的字体要求比较高,所以,有的地方不支持中文验证码 */ class Captcha{ //配置参数 private $config = array(); //验证码 private $verifyCode = ''; //获取配置文件的配置信息,给类传参数就行,例如new Captcha($config);$config是你的配置文件信息 public function __construct($config=array('width'=>100,'height'=>40,'length'=>4,'size'=>7,'lines'=>0,'dots'=>0,'font'=>'simfang.ttf','rectangle'=>array(255,55,122),'charset'=>true,'chinese'=>'来到新机场主航站楼建设在婚姻关系存续期间所负债务她在收到要求她偿还前夫在婚姻关系存续期间所欠债务的法院传票后要精益求精善始善终')){ $this->config = $config; } //创建验证码 private function captchaImage(){ //画布 $img = imagecreatetruecolor($this->config['width'],$this->config['height']); //填充画布颜色 imagefill($img,0,0,imagecolorallocate($img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255))); //需要边框则画边框 if($this->config['rectangle'] && is_array($this->config['rectangle']) && count($this->config['rectangle']) == 3){ $this->tangle($img); } $this->verifyCode = $this->code($img,$this->config['charset'],$this->config['chinese']); //存在则添加干扰线 if($this->config['lines']){ $this->codeLines($img); } //存在则添加干扰点 if($this->config['dots']){ $this->codeDots($img); } return $img; } private function codeLines($img){ //绘制干扰线 for($i=0;$i<$this->config['lines'];$i++){ imageline($img,mt_rand(0,$this->config['width'] / 10),mt_rand(0,$this->config['height']),mt_rand($this->config['width'] * 7/ 10,$this->config['width'] * 9/ 10),mt_rand(0,$this->config['height']),imagecolorallocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255))); } } private function codeDots($img){ //添加噪点 for($i=0;$i<$this->config['dots'];$i++){ //噪点颜色 $color = imagecolorallocate($img,mt_rand(0,180),mt_rand(0,180),mt_rand(0,180)); imagestring($img,mt_rand(1,3),mt_rand(0,170),mt_rand(0,30),'*',$color); } } /*画布边框*/ private function tangle($img){ imagerectangle($img,0,0,$this->config['width']-1,$this->config['height']-1,imagecolorallocate($img,$this->config['rectangle'][0],$this->config['rectangle'][1],$this->config['rectangle'][2])); } /*生成验证码,默认英文,$ch为true则为中文*/ private function code($img,$ch=false,$set=''){ $str = ""; //计算间隔 $span = ceil($this->config['width']/($this->config['length']+1)); if($ch && !empty($set)){ //随机产生字符 $set = $this->config['chinese']; for($i=0;$i<$this->config['length'];$i++){ $end = strlen($set)/3; $pos = mt_rand(0,$end-1); $str .= substr($set,$pos*3,3); } //每次绘制一个字符 for($i=1;$i<=$this->config['length'];$i++){ imagettftext($img,16,mt_rand(-30,60),$i*$span,$this->config['height']*3/5,imagecolorallocate($img,mt_rand(0,180),mt_rand(0,180),mt_rand(0,180)),$this->config['font'],substr($str,($i-1)*3,3)); } }else{ //随机生成字母或者数字 for($i=0;$i<$this->config['length'];$i++){ switch(mt_rand(0,2)){ case 0: $str .= chr(mt_rand(65,90)); break; case 1: $str .= chr(mt_rand(97,122)); break; case 2: $str .= chr(mt_rand(48,57)); } } //每次绘制一个字符 for($i=1;$i<=$this->config['length'];$i++){ imagestring($img,$this->config['size'],$i*$span,0,$str[$i-1],imagecolorallocate($img,mt_rand(0,180),mt_rand(0,180),mt_rand(0,180))); } } return $str; } //获取验证码 public function verify(){ return $this->verifyCode; } //生成验证码 public function entry(){ header("content-type:image/png"); imagepng($this->captchaImage()); } } $ob = new Captcha; $ob->entry();
#最後,為了不誤人子弟,還是再強調一遍:
這裡必須先用entry產生驗證碼,再用verify產生驗證碼的字串,也就是必須先呼叫entry,然後才能夠調用verify產生驗證碼的字串,原因程式碼已經說明問題了,因為驗證碼的字串是在entry方法的方法captchaImage中產生的,所以必須先呼叫它才行有的地方對中文的字體要求比較高,所以,有的地方不支援中文驗證碼
以上就是本文的全部內容,希望對大家的學習有所幫助。
相關推薦:
驗證
功能的方法以上是php實作封裝的驗證碼類的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。
