Go生成base64圖片驗證碼實例(超詳細工具類)
前言
之前網(wǎng)上的很多例子都很舊了,這次我分享的是最新版本的使用,注意以下所有代碼均在同一個go文件中,我只是分開講解了每一塊的作用,最終使用直接調(diào)用 CreateCode()
方法即可,驗證調(diào)用 VerifyCaptcha(id, VerifyValue string)
方法即可
本工具類是使用 base64Captcha
庫進行圖片驗證碼的生成,如下圖所示:
1.下載依賴包
先下載生成圖片驗證碼所需要的依賴包 go get github.com/mojocn/base64Captcha
2.創(chuàng)建圖片驗證碼存儲對象
2.1 創(chuàng)建默認的對象
使用DefaultMemStore
創(chuàng)建的對象,存儲的驗證碼為 10240 個,過期時間為 10分鐘
var result = base64Captcha.DefaultMemStore
2.2 創(chuàng)建自定義的對象
根據(jù)自己需求更改驗證碼存儲上限,以下代碼設(shè)置存儲的驗證碼為 20240個,過期時間為 3分鐘
var result = base64Captcha.NewMemoryStore(20240, 3*time.Minute)
3.配置各種類型的圖片驗證碼的配置
以下配置是按照自己的愛好來配置的
如果想更改,可以從這個網(wǎng)站來查看各種圖片驗證碼的配置:https://captcha.mojotv.cn/
// mathConfig 生成圖形化算術(shù)驗證碼配置 func mathConfig() *base64Captcha.DriverMath { mathType := &base64Captcha.DriverMath{ Height: 50, Width: 100, NoiseCount: 0, ShowLineOptions: base64Captcha.OptionShowHollowLine, BgColor: &color.RGBA{ R: 40, G: 30, B: 89, A: 29, }, Fonts: nil, } return mathType } // digitConfig 生成圖形化數(shù)字驗證碼配置 func digitConfig() *base64Captcha.DriverDigit { digitType := &base64Captcha.DriverDigit{ Height: 50, Width: 100, Length: 5, MaxSkew: 0.45, DotCount: 80, } return digitType } // stringConfig 生成圖形化字符串驗證碼配置 func stringConfig() *base64Captcha.DriverString { stringType := &base64Captcha.DriverString{ Height: 100, Width: 50, NoiseCount: 0, ShowLineOptions: base64Captcha.OptionShowHollowLine | base64Captcha.OptionShowSlimeLine, Length: 5, Source: "123456789qwertyuiopasdfghjklzxcvb", BgColor: &color.RGBA{ R: 40, G: 30, B: 89, A: 29, }, Fonts: nil, } return stringType } // chineseConfig 生成圖形化漢字驗證碼配置 func chineseConfig() *base64Captcha.DriverChinese { chineseType := &base64Captcha.DriverChinese{ Height: 50, Width: 100, NoiseCount: 0, ShowLineOptions: base64Captcha.OptionShowSlimeLine, Length: 2, Source: "設(shè)想,你在,處理,消費者,的音,頻輸,出音,頻可,能無,論什,么都,沒有,任何,輸出,或者,它可,能是,單聲道,立體聲,或是,環(huán)繞立,體聲的,不想要,的值", BgColor: &color.RGBA{ R: 40, G: 30, B: 89, A: 29, }, Fonts: nil, } return chineseType } // autoConfig 生成圖形化數(shù)字音頻驗證碼配置 func autoConfig() *base64Captcha.DriverAudio { chineseType := &base64Captcha.DriverAudio{ Length: 4, Language: "zh", } return chineseType }
4.創(chuàng)建圖片驗證碼
注意:我這里的配置
viper.GetString("code.captcha_type")
是讀取的yaml配置文件設(shè)置的,大家可以自行設(shè)置
audio 音頻驗證碼、string 字符串+數(shù)字驗證碼、math 算術(shù)運算驗證碼、chinese 純漢字驗證碼、digit 純數(shù)字驗證碼
// @Result id 驗證碼id // @Result bse64s 圖片base64編碼 // @Result err 錯誤 func CreateCode() (string, string, error) { var driver base64Captcha.Driver // switch case分支中的方法為目錄3的配置 // switch case分支中的方法為目錄3的配置 // switch case分支中的方法為目錄3的配置 switch viper.GetString("code.captcha_type") { case "audio": driver = autoConfig() case "string": driver = stringConfig() case "math": driver = mathConfig() case "chinese": driver = chineseConfig() case "digit": driver = digitConfig() } if driver == nil { panic("生成驗證碼的類型沒有配置,請在yaml文件中配置完再次重試啟動項目") } // 創(chuàng)建驗證碼并傳入創(chuàng)建的類型的配置,以及存儲的對象 c := base64Captcha.NewCaptcha(driver, result) id, b64s, err := c.Generate() return id, b64s, err }
5.校驗驗證碼
注意
Verify(id, VerifyValue, true)
中的 true參數(shù)
當為 true 時,校驗 傳入的id 的驗證碼,校驗完 這個ID的驗證碼就要在內(nèi)存中刪除
當為 false 時,校驗 傳入的id 的驗證碼,校驗完 這個ID的驗證碼不刪除
// @Pram id 驗證碼id // @Pram VerifyValue 用戶輸入的答案 // @Result true:正確,false:失敗 func VerifyCaptcha(id, VerifyValue string) bool { // result 為步驟1 創(chuàng)建的圖片驗證碼存儲對象 return result.Verify(id, VerifyValue, true) }
6.獲取驗證碼答案
注意
Get(codeId, false)
中的 false 參數(shù)
當為 true 時,根據(jù)ID獲取完驗證碼就要刪除這個驗證碼
當為 false 時,根據(jù)ID獲取完驗證碼不刪除
// @Pram codeId 驗證碼id // @Result 驗證碼答案 func GetCodeAnswer(codeId string) string { // result 為步驟1 創(chuàng)建的圖片驗證碼存儲對象 return result.Get(codeId, false) }
總結(jié)
到此這篇關(guān)于Go生成base64圖片驗證碼的文章就介紹到這了,更多相關(guān)Go生成base64圖片驗證碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一文帶你了解Go中跟蹤函數(shù)調(diào)用鏈的實現(xiàn)
這篇文章主要為大家詳細介紹了go如何實現(xiàn)一個自動注入跟蹤代碼,并輸出有層次感的函數(shù)調(diào)用鏈跟蹤命令行工具,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11golang?gorm模型結(jié)構(gòu)體的定義示例
這篇文章主要為大家介紹了golang?gorm模型結(jié)構(gòu)體的定義示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪2022-04-04Go語言開發(fā)編程規(guī)范命令風(fēng)格代碼格式
這篇文章主要為大家介紹了Go語言開發(fā)編程規(guī)范命令風(fēng)格代碼格式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06Go 語言json.Unmarshal 遇到的小問題(推薦)
這篇文章主要介紹了 Go 語言json.Unmarshal 遇到的小問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07