欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go生成base64圖片驗證碼實例(超詳細工具類)

 更新時間:2023年06月25日 11:07:38   作者:xkzeee  
這段時間需要使用圖片驗證碼庫,下面這篇文章主要給大家介紹了關(guān)于Go生成base64圖片驗證碼的相關(guān)資料,文中給出了詳細的實例代碼,需要的朋友可以參考下

前言

之前網(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)文章

  • 使用golang實現(xiàn)在屏幕上打印進度條的操作

    使用golang實現(xiàn)在屏幕上打印進度條的操作

    這篇文章主要介紹了使用golang實現(xiàn)在屏幕上打印進度條的操作,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Go語言學(xué)習(xí)教程之聲明語法(譯)

    Go語言學(xué)習(xí)教程之聲明語法(譯)

    Golang 就是類C的語法,下面這篇文章主要給大家介紹了關(guān)于Go語言學(xué)習(xí)教程之聲明語法的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • 一文帶你了解Go中跟蹤函數(shù)調(diào)用鏈的實現(xiàn)

    一文帶你了解Go中跟蹤函數(shù)調(diào)用鏈的實現(xiàn)

    這篇文章主要為大家詳細介紹了go如何實現(xiàn)一個自動注入跟蹤代碼,并輸出有層次感的函數(shù)調(diào)用鏈跟蹤命令行工具,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • 詳解Go語言如何判斷兩個對象是否相等

    詳解Go語言如何判斷兩個對象是否相等

    在編程中,判斷兩個對象是否相等是一項常見的任務(wù),同時判斷對象是否相等在很多情況下都非常重要,所以在接下來的內(nèi)容中,我們將詳細介紹在?Go?語言中如何判斷對象是否相等的方法和技巧,需要的可以參考一下
    2023-06-06
  • Golang讀寫Excel的方法教程

    Golang讀寫Excel的方法教程

    這篇文章主要給大家介紹了關(guān)于Golang讀寫Excel的方法教程,golang操作excel利用的是Excelize,Excelize是Golang編寫的一個用來操作 Office Excel 文檔類庫,基于微軟的Office OpenXML標準,文中介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-05-05
  • golang?gorm模型結(jié)構(gòu)體的定義示例

    golang?gorm模型結(jié)構(gòu)體的定義示例

    這篇文章主要為大家介紹了golang?gorm模型結(jié)構(gòu)體的定義示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • Go語言開發(fā)編程規(guī)范命令風(fēng)格代碼格式

    Go語言開發(fā)編程規(guī)范命令風(fēng)格代碼格式

    這篇文章主要為大家介紹了Go語言開發(fā)編程規(guī)范命令風(fēng)格代碼格式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • go語言中布隆過濾器低空間成本判斷元素是否存在方式

    go語言中布隆過濾器低空間成本判斷元素是否存在方式

    這篇文章主要為大家介紹了go語言中布隆過濾器低空間成本判斷元素是否存在方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • Go 語言json.Unmarshal 遇到的小問題(推薦)

    Go 語言json.Unmarshal 遇到的小問題(推薦)

    這篇文章主要介紹了 Go 語言json.Unmarshal 遇到的小問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • go下載指定版本的依賴包圖文詳解

    go下載指定版本的依賴包圖文詳解

    由于依賴包的每個版本都有一個唯一的目錄,所以在多項目場景中需要使用同一個依賴包的多版本時才不會產(chǎn)生沖突,下面這篇文章主要給大家介紹了關(guān)于go下載指定版本的依賴包的相關(guān)資料,需要的朋友可以參考下
    2023-04-04

最新評論