golang實(shí)現(xiàn)圖像驗(yàn)證碼的示例代碼
為什么base64圖片 for RESTful 服務(wù)
Data URIs 支持大部分瀏覽器,IE8之后也支持.
小圖片使用base64響應(yīng)對(duì)于RESTful服務(wù)來(lái)說(shuō)更便捷
安裝golang包
go get -u github.com/mojocn/base64Captcha
對(duì)于中國(guó)大陸Gopher go get golang.org/x/image 失敗解決方案:
mkdir -p $GOPATH/src/golang.org/x
cd $GOPATH/src/golang.org/x
git clone https://github.com/golang/image.git
創(chuàng)建圖像驗(yàn)證碼
import "github.com/mojocn/base64Captcha" func demoCodeCaptchaCreate() { //config struct for digits //數(shù)字驗(yàn)證碼配置 var configD = base64Captcha.ConfigDigit{ Height: 80, Width: 240, MaxSkew: 0.7, DotCount: 80, CaptchaLen: 5, } //config struct for audio //聲音驗(yàn)證碼配置 var configA = base64Captcha.ConfigAudio{ CaptchaLen: 6, Language: "zh", } //config struct for Character //字符,公式,驗(yàn)證碼配置 var configC = base64Captcha.ConfigCharacter{ Height: 60, Width: 240, //const CaptchaModeNumber:數(shù)字,CaptchaModeAlphabet:字母,CaptchaModeArithmetic:算術(shù),CaptchaModeNumberAlphabet:數(shù)字字母混合. Mode: base64Captcha.CaptchaModeNumber, ComplexOfNoiseText: base64Captcha.CaptchaComplexLower, ComplexOfNoiseDot: base64Captcha.CaptchaComplexLower, IsShowHollowLine: false, IsShowNoiseDot: false, IsShowNoiseText: false, IsShowSlimeLine: false, IsShowSineLine: false, CaptchaLen: 6, } //創(chuàng)建聲音驗(yàn)證碼 //GenerateCaptcha 第一個(gè)參數(shù)為空字符串,包會(huì)自動(dòng)在服務(wù)器一個(gè)隨機(jī)種子給你產(chǎn)生隨機(jī)uiid. idKeyA, capA := base64Captcha.GenerateCaptcha("", configA) //以base64編碼 base64stringA := base64Captcha.CaptchaWriteToBase64Encoding(capA) //創(chuàng)建字符公式驗(yàn)證碼. //GenerateCaptcha 第一個(gè)參數(shù)為空字符串,包會(huì)自動(dòng)在服務(wù)器一個(gè)隨機(jī)種子給你產(chǎn)生隨機(jī)uiid. idKeyC, capC := base64Captcha.GenerateCaptcha("", configC) //以base64編碼 base64stringC := base64Captcha.CaptchaWriteToBase64Encoding(capC) //創(chuàng)建數(shù)字驗(yàn)證碼. //GenerateCaptcha 第一個(gè)參數(shù)為空字符串,包會(huì)自動(dòng)在服務(wù)器一個(gè)隨機(jī)種子給你產(chǎn)生隨機(jī)uiid. idKeyD, capD := base64Captcha.GenerateCaptcha("", configD) //以base64編碼 base64stringD := base64Captcha.CaptchaWriteToBase64Encoding(capD) fmt.Println(idKeyA, base64stringA, "\n") fmt.Println(idKeyC, base64stringC, "\n") fmt.Println(idKeyD, base64stringD, "\n") }
驗(yàn)證圖像驗(yàn)證碼
import "github.com/mojocn/base64Captcha" func verfiyCaptcha(idkey,verifyValue string){ verifyResult := base64Captcha.VerifyCaptcha(idkey, verifyValue) if verifyResult { //success } else { //fail } }
使用golang搭建API服務(wù) main.go
// example of HTTP server that uses the captcha package. package main import ( "encoding/json" "fmt" "github.com/mojocn/base64Captcha" "log" "net/http" ) //ConfigJsonBody json request body. type ConfigJsonBody struct { Id string CaptchaType string VerifyValue string ConfigAudio base64Captcha.ConfigAudio ConfigCharacter base64Captcha.ConfigCharacter ConfigDigit base64Captcha.ConfigDigit } // base64Captcha create http handler func generateCaptchaHandler(w http.ResponseWriter, r *http.Request) { //parse request parameters //接收客戶端發(fā)送來(lái)的請(qǐng)求參數(shù) decoder := json.NewDecoder(r.Body) var postParameters ConfigJsonBody err := decoder.Decode(&postParameters) if err != nil { log.Println(err) } defer r.Body.Close() //create base64 encoding captcha //創(chuàng)建base64圖像驗(yàn)證碼 var config interface{} switch postParameters.CaptchaType { case "audio": config = postParameters.ConfigAudio case "character": config = postParameters.ConfigCharacter default: config = postParameters.ConfigDigit } //GenerateCaptcha 第一個(gè)參數(shù)為空字符串,包會(huì)自動(dòng)在服務(wù)器一個(gè)隨機(jī)種子給你產(chǎn)生隨機(jī)uiid. captchaId, digitCap := base64Captcha.GenerateCaptcha(postParameters.Id, config) base64Png := base64Captcha.CaptchaWriteToBase64Encoding(digitCap) //or you can do this //你也可以是用默認(rèn)參數(shù) 生成圖像驗(yàn)證碼 //base64Png := captcha.GenerateCaptchaPngBase64StringDefault(captchaId) //set json response //設(shè)置json響應(yīng) w.Header().Set("Content-Type", "application/json; charset=utf-8") body := map[string]interface{}{"code": 1, "data": base64Png, "captchaId": captchaId, "msg": "success"} json.NewEncoder(w).Encode(body) } // base64Captcha verify http handler func captchaVerifyHandle(w http.ResponseWriter, r *http.Request) { //parse request parameters //接收客戶端發(fā)送來(lái)的請(qǐng)求參數(shù) decoder := json.NewDecoder(r.Body) var postParameters ConfigJsonBody err := decoder.Decode(&postParameters) if err != nil { log.Println(err) } defer r.Body.Close() //verify the captcha //比較圖像驗(yàn)證碼 verifyResult := base64Captcha.VerifyCaptcha(postParameters.Id, postParameters.VerifyValue) //set json response //設(shè)置json響應(yīng) w.Header().Set("Content-Type", "application/json; charset=utf-8") body := map[string]interface{}{"code": "error", "data": "驗(yàn)證失敗", "msg": "captcha failed"} if verifyResult { body = map[string]interface{}{"code": "success", "data": "驗(yàn)證通過(guò)", "msg": "captcha verified"} } json.NewEncoder(w).Encode(body) } //start a net/http server //啟動(dòng)golang net/http 服務(wù)器 func main() { //serve Vuejs+ElementUI+Axios Web Application http.Handle("/", http.FileServer(http.Dir("./static"))) //api for create captcha //創(chuàng)建圖像驗(yàn)證碼api http.HandleFunc("/api/getCaptcha", generateCaptchaHandler) //api for verify captcha http.HandleFunc("/api/verifyCaptcha", captchaVerifyHandle) fmt.Println("Server is at localhost:3333") if err := http.ListenAndServe("localhost:3333", nil); err != nil { log.Fatal(err) } }
運(yùn)行demo代碼
cd $GOPATH/src/github.com/mojocn/captcha/examples go run main.go
到此這篇關(guān)于golang實(shí)現(xiàn)圖像驗(yàn)證碼的示例代碼的文章就介紹到這了,更多相關(guān)go圖像驗(yàn)證碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang語(yǔ)言http協(xié)議get拼接參數(shù)操作
這篇文章主要介紹了golang語(yǔ)言http協(xié)議get拼接參數(shù)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12Golang中實(shí)現(xiàn)類似類與繼承的方法(示例代碼)
這篇文章主要介紹了Golang中實(shí)現(xiàn)類似類與繼承的方法,Go語(yǔ)言中通過(guò)方法接受者的類型來(lái)決定方法的歸屬和繼承關(guān)系,本文通過(guò)示例代碼講解的非常詳細(xì),需要的朋友可以參考下2024-04-04一文帶你搞懂Golang結(jié)構(gòu)體內(nèi)存布局
結(jié)構(gòu)體在Go語(yǔ)言中是一個(gè)很重要的部分,在項(xiàng)目中會(huì)經(jīng)常用到。這篇文章主要帶大家看一下結(jié)構(gòu)體在內(nèi)存中是怎么分布的?通過(guò)對(duì)內(nèi)存布局的了解,可以幫助我們寫(xiě)出更優(yōu)質(zhì)的代碼。感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助2022-10-10golang常用庫(kù)之操作數(shù)據(jù)庫(kù)的orm框架-gorm基本使用詳解
這篇文章主要介紹了golang常用庫(kù)之操作數(shù)據(jù)庫(kù)的orm框架-gorm基本使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10golang結(jié)構(gòu)化日志slog的用法簡(jiǎn)介
日志是任何軟件的重要組成部分,Go?提供了一個(gè)內(nèi)置日志包(slog),在本文中,小編將簡(jiǎn)單介紹一下slog包的功能以及如何在?Go?應(yīng)用程序中使用它,感興趣的可以了解下2023-09-09golang validator參數(shù)校驗(yàn)的實(shí)現(xiàn)
這篇文章主要介紹了golang validator參數(shù)校驗(yàn)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10瞅一眼就能學(xué)會(huì)的GO并發(fā)編程使用教程
隨著互聯(lián)網(wǎng)的普及,互聯(lián)網(wǎng)用戶人數(shù)原來(lái)越多,這對(duì)系統(tǒng)的性能帶來(lái)了巨大的挑戰(zhàn)。這個(gè)時(shí)候就需要并發(fā)編程了,本文為大家整理了詳細(xì)的GO并發(fā)編程使用教程,讓你看完就能學(xué)會(huì)2023-02-02