golang包快速生成base64驗(yàn)證碼的方法
base64Captcha快速生成base64編碼圖片驗(yàn)證碼字符串
支持多種樣式,算術(shù),數(shù)字,字母,混合模式,語音模式.
Base64是網(wǎng)絡(luò)上最常見的用于傳輸8Bit字節(jié)代碼的編碼方式之一。Base64編碼可用于在HTTP環(huán)境下傳遞較長(zhǎng)的標(biāo)識(shí)信息, 直接把base64當(dāng)成是字符串方式的數(shù)據(jù)就好了
減少了http請(qǐng)求;數(shù)據(jù)就是圖片;
為APIs微服務(wù)而設(shè)計(jì)
為什么base64圖片 for RESTful 服務(wù)
Data URIs 支持大部分瀏覽器,IE8之后也支持.
小圖片使用base64響應(yīng)對(duì)于RESTful服務(wù)來說更便捷
godoc文檔
在線Demo Playground Powered by Vuejs+elementUI+Axios

安裝golang包
go get -u github.com/mojocn/base64Captcha
創(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,
}
//create a audio captcha.
idKeyA, capA := base64Captcha.GenerateCaptcha("", configA)
//以base64編碼
base64stringA := base64Captcha.CaptchaWriteToBase64Encoding(capA)
//create a characters captcha.
idKeyC, capC := base64Captcha.GenerateCaptcha("", configC)
//以base64編碼
base64stringC := base64Captcha.CaptchaWriteToBase64Encoding(capC)
//create a digits captcha.
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ù)
// 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
}
var configC = base64Captcha.ConfigCharacter{
Height: 60,
Width: 240,
Mode: 0,
ComplexOfNoiseText: 0,
ComplexOfNoiseDot: 0,
IsShowHollowLine: false,
IsShowNoiseDot: false,
IsShowNoiseText: false,
IsShowSlimeLine: false,
IsShowSineLine: false,
CaptchaLen: 6,
}
// base64Captcha create http handler
func generateCaptchaHandler(w http.ResponseWriter, r *http.Request) {
//parse request parameters
//接收客戶端發(fā)送來的請(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
}
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ā)送來的請(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)證通過", "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
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包快速生成base64驗(yàn)證碼的方法的文章就介紹到這了,更多相關(guān)golang base64驗(yàn)證碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang編程實(shí)現(xiàn)生成n個(gè)從a到b不重復(fù)隨機(jī)數(shù)的方法
這篇文章主要介紹了Golang編程實(shí)現(xiàn)生成n個(gè)從a到b不重復(fù)隨機(jī)數(shù)的方法,結(jié)合實(shí)例形式分析了Go語言字符串操作及隨機(jī)數(shù)生成的相關(guān)操作技巧,需要的朋友可以參考下2017-01-01
win7下配置GO語言環(huán)境 + eclipse配置GO開發(fā)
這篇文章主要介紹了win7下配置GO語言環(huán)境 + eclipse配置GO開發(fā),需要的朋友可以參考下2014-10-10
Go語言利用time.After實(shí)現(xiàn)超時(shí)控制的方法詳解
最近在學(xué)習(xí)golang,所以下面這篇文章主要給大家介紹了關(guān)于Go語言利用time.After實(shí)現(xiàn)超時(shí)控制的相關(guān)資料,文中通過示例介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08
Go標(biāo)準(zhǔn)庫(kù)常見錯(cuò)誤分析和解決辦法
Go語言的標(biāo)準(zhǔn)庫(kù)為開發(fā)者提供了豐富且高效的工具,涵蓋了從網(wǎng)絡(luò)編程到文件操作等各個(gè)方面,然而,標(biāo)準(zhǔn)庫(kù)雖好,使用不當(dāng)卻可能適得其反,正所謂"工欲善其事,必先利其器",本文將深入剖析Go標(biāo)準(zhǔn)庫(kù)使用中的常見錯(cuò)誤,幫助開發(fā)者避開這些坑,寫出更加健壯的代碼2025-04-04
go mutex互斥鎖使用Lock和Unlock方法占有釋放資源
Go號(hào)稱是為了高并發(fā)而生的,在高并發(fā)場(chǎng)景下,勢(shì)必會(huì)涉及到對(duì)公共資源的競(jìng)爭(zhēng),當(dāng)對(duì)應(yīng)場(chǎng)景發(fā)生時(shí),我們經(jīng)常會(huì)使用 mutex 的 Lock() 和 Unlock() 方法來占有或釋放資源,雖然調(diào)用簡(jiǎn)單,但 mutex 的內(nèi)部卻涉及挺多的,本文來好好研究一下2023-09-09

