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

Go生成base64圖片驗(yàn)證碼實(shí)例(超詳細(xì)工具類)

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

前言

之前網(wǎng)上的很多例子都很舊了,這次我分享的是最新版本的使用,注意以下所有代碼均在同一個(gè)go文件中,我只是分開講解了每一塊的作用,最終使用直接調(diào)用 CreateCode() 方法即可,驗(yàn)證調(diào)用 VerifyCaptcha(id, VerifyValue string) 方法即可

本工具類是使用 base64Captcha 庫(kù)進(jìn)行圖片驗(yàn)證碼的生成,如下圖所示:

1.下載依賴包

先下載生成圖片驗(yàn)證碼所需要的依賴包 go get github.com/mojocn/base64Captcha

2.創(chuàng)建圖片驗(yàn)證碼存儲(chǔ)對(duì)象

2.1 創(chuàng)建默認(rèn)的對(duì)象

使用DefaultMemStore 創(chuàng)建的對(duì)象,存儲(chǔ)的驗(yàn)證碼為 10240 個(gè),過(guò)期時(shí)間為 10分鐘

var result = base64Captcha.DefaultMemStore

2.2 創(chuàng)建自定義的對(duì)象

根據(jù)自己需求更改驗(yàn)證碼存儲(chǔ)上限,以下代碼設(shè)置存儲(chǔ)的驗(yàn)證碼為 20240個(gè),過(guò)期時(shí)間為 3分鐘

var result = base64Captcha.NewMemoryStore(20240, 3*time.Minute)

3.配置各種類型的圖片驗(yàn)證碼的配置

以下配置是按照自己的愛(ài)好來(lái)配置的

如果想更改,可以從這個(gè)網(wǎng)站來(lái)查看各種圖片驗(yàn)證碼的配置:https://captcha.mojotv.cn/

// mathConfig 生成圖形化算術(shù)驗(yàn)證碼配置
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ù)字驗(yàn)證碼配置
func digitConfig() *base64Captcha.DriverDigit {
	digitType := &base64Captcha.DriverDigit{
		Height:   50,
		Width:    100,
		Length:   5,
		MaxSkew:  0.45,
		DotCount: 80,
	}
	return digitType
}

// stringConfig 生成圖形化字符串驗(yàn)證碼配置
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 生成圖形化漢字驗(yàn)證碼配置
func chineseConfig() *base64Captcha.DriverChinese {
	chineseType := &base64Captcha.DriverChinese{
		Height:          50,
		Width:           100,
		NoiseCount:      0,
		ShowLineOptions: base64Captcha.OptionShowSlimeLine,
		Length:          2,
		Source:          "設(shè)想,你在,處理,消費(fèi)者,的音,頻輸,出音,頻可,能無(wú),論什,么都,沒(méi)有,任何,輸出,或者,它可,能是,單聲道,立體聲,或是,環(huán)繞立,體聲的,不想要,的值",
		BgColor: &color.RGBA{
			R: 40,
			G: 30,
			B: 89,
			A: 29,
		},
		Fonts: nil,
	}
	return chineseType
}

// autoConfig 生成圖形化數(shù)字音頻驗(yàn)證碼配置
func autoConfig() *base64Captcha.DriverAudio {
	chineseType := &base64Captcha.DriverAudio{
		Length:   4,
		Language: "zh",
	}
	return chineseType
}

4.創(chuàng)建圖片驗(yàn)證碼

注意:我這里的配置viper.GetString("code.captcha_type") 是讀取的yaml配置文件設(shè)置的,大家可以自行設(shè)置
audio 音頻驗(yàn)證碼、string 字符串+數(shù)字驗(yàn)證碼、math 算術(shù)運(yùn)算驗(yàn)證碼、chinese 純漢字驗(yàn)證碼、digit 純數(shù)字驗(yàn)證碼

// @Result id 驗(yàn)證碼id
// @Result bse64s 圖片base64編碼
// @Result err 錯(cuò)誤
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("生成驗(yàn)證碼的類型沒(méi)有配置,請(qǐng)?jiān)趛aml文件中配置完再次重試啟動(dòng)項(xiàng)目")
	}
	// 創(chuàng)建驗(yàn)證碼并傳入創(chuàng)建的類型的配置,以及存儲(chǔ)的對(duì)象
	c := base64Captcha.NewCaptcha(driver, result)
	id, b64s, err := c.Generate()
	return id, b64s, err
}

5.校驗(yàn)驗(yàn)證碼

注意 Verify(id, VerifyValue, true) 中的 true參數(shù)
當(dāng)為 true 時(shí),校驗(yàn) 傳入的id 的驗(yàn)證碼,校驗(yàn)完 這個(gè)ID的驗(yàn)證碼就要在內(nèi)存中刪除
當(dāng)為 false 時(shí),校驗(yàn) 傳入的id 的驗(yàn)證碼,校驗(yàn)完 這個(gè)ID的驗(yàn)證碼不刪除

// @Pram id 驗(yàn)證碼id
// @Pram VerifyValue 用戶輸入的答案
// @Result true:正確,false:失敗
func VerifyCaptcha(id, VerifyValue string) bool {
	// result 為步驟1 創(chuàng)建的圖片驗(yàn)證碼存儲(chǔ)對(duì)象
	return result.Verify(id, VerifyValue, true)
}

6.獲取驗(yàn)證碼答案

注意 Get(codeId, false) 中的 false 參數(shù)
當(dāng)為 true 時(shí),根據(jù)ID獲取完驗(yàn)證碼就要?jiǎng)h除這個(gè)驗(yàn)證碼
當(dāng)為 false 時(shí),根據(jù)ID獲取完驗(yàn)證碼不刪除

// @Pram codeId 驗(yàn)證碼id
// @Result 驗(yàn)證碼答案
func GetCodeAnswer(codeId string) string {
	// result 為步驟1 創(chuàng)建的圖片驗(yàn)證碼存儲(chǔ)對(duì)象
	return result.Get(codeId, false)
}

總結(jié)

到此這篇關(guān)于Go生成base64圖片驗(yàn)證碼的文章就介紹到這了,更多相關(guān)Go生成base64圖片驗(yàn)證碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何解決goland,idea全局搜索快捷鍵失效問(wèn)題

    如何解決goland,idea全局搜索快捷鍵失效問(wèn)題

    這篇文章主要介紹了如何解決goland,idea全局搜索快捷鍵失效問(wèn)題,快捷鍵失效,可能是快捷鍵沖突,也或者是快捷鍵被修改成其他了。在settings下查看快捷鍵是否被修改,下文詳細(xì)介紹需要的朋友可以參考下
    2022-04-04
  • go語(yǔ)言yaml轉(zhuǎn)map、map遍歷的實(shí)現(xiàn)

    go語(yǔ)言yaml轉(zhuǎn)map、map遍歷的實(shí)現(xiàn)

    本文主要介紹了go語(yǔ)言yaml轉(zhuǎn)map、map遍歷的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 詳解Golang中Context的原理和使用技巧

    詳解Golang中Context的原理和使用技巧

    Golang?的?Context?包,中文可以稱之為“上下文”,是用來(lái)在?goroutine?協(xié)程之間進(jìn)行上下文信息傳遞的,這些上下文信息包括?kv?數(shù)據(jù)、取消信號(hào)、超時(shí)時(shí)間、截止時(shí)間等。本文主要介紹了Context的原理和使用技巧,希望對(duì)大家有所幫助
    2022-11-11
  • golang中sync.Map并發(fā)創(chuàng)建、讀取問(wèn)題實(shí)戰(zhàn)記錄

    golang中sync.Map并發(fā)創(chuàng)建、讀取問(wèn)題實(shí)戰(zhàn)記錄

    這篇文章主要給大家介紹了關(guān)于golang中sync.Map并發(fā)創(chuàng)建、讀取問(wèn)題的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • 淺談Go語(yǔ)言并發(fā)機(jī)制

    淺談Go語(yǔ)言并發(fā)機(jī)制

    這篇文章主要介紹了淺談Go語(yǔ)言并發(fā)機(jī)制,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • Go語(yǔ)言中rune方法使用詳解

    Go語(yǔ)言中rune方法使用詳解

    本文主要介紹了Go語(yǔ)言中rune方法使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Go搭建高效的Gin Web目錄結(jié)構(gòu)

    Go搭建高效的Gin Web目錄結(jié)構(gòu)

    本文主要介紹了Go搭建高效的Gin Web目錄結(jié)構(gòu),構(gòu)建一個(gè)既高效又便于管理的項(xiàng)目架構(gòu),助力開發(fā)者打造既快速響應(yīng)又易于維護(hù)的Web應(yīng)用程序,感興趣的可以了解一下
    2025-08-08
  • Go語(yǔ)言實(shí)現(xiàn)讀取文件的方式總結(jié)

    Go語(yǔ)言實(shí)現(xiàn)讀取文件的方式總結(jié)

    這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言實(shí)現(xiàn)讀取文件的幾個(gè)方式,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Go語(yǔ)言有一定的幫助,感興趣的小伙伴可以收藏一下
    2023-04-04
  • Go開發(fā)Gin項(xiàng)目添加jwt功能實(shí)例詳解

    Go開發(fā)Gin項(xiàng)目添加jwt功能實(shí)例詳解

    這篇文章主要為大家介紹了Go開發(fā)Gin項(xiàng)目中添加jwt功能實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Go語(yǔ)言并發(fā)爬蟲的具體實(shí)現(xiàn)

    Go語(yǔ)言并發(fā)爬蟲的具體實(shí)現(xiàn)

    本文主要介紹了Go語(yǔ)言并發(fā)爬蟲的具體實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12

最新評(píng)論