1. 程式人生 > 程式設計 >golang包快速生成base64驗證碼的方法

golang包快速生成base64驗證碼的方法

base64Captcha快速生成base64編碼圖片驗證碼字串

支援多種樣式,算術,數字,字母,混合模式,語音模式.

Base64是網路上最常見的用於傳輸8Bit位元組程式碼的編碼方式之一。Base64編碼可用於在HTTP環境下傳遞較長的標識資訊,直接把base64當成是字串方式的資料就好了

減少了http請求;資料就是圖片;

為APIs微服務而設計

為什麼base64圖片 for RESTful 服務

Data URIs 支援大部分瀏覽器,IE8之後也支援.

小圖片使用base64響應對於RESTful服務來說更便捷
godoc文件

線上Demo Playground Powered by Vuejs+elementUI+Axios

golang包快速生成base64驗證碼的方法

安裝golang包

go get -u github.com/mojocn/base64Captcha

建立影象驗證碼

import "github.com/mojocn/base64Captcha"
func demoCodeCaptchaCreate() {
  //config struct for digits
  //數字驗證碼配置
  var configD = base64Captcha.ConfigDigit{
    Height:   80,Width:   240,MaxSkew:  0.7,DotCount:  80,CaptchaLen: 5,}
  //config struct for audio
  //聲音驗證碼配置
  var configA = base64Captcha.ConfigAudio{
    CaptchaLen: 6,Language:  "zh",}
  //config struct for Character
  //字元,公式,驗證碼配置
  var configC = base64Captcha.ConfigCharacter{
    Height:       60,Width:       240,//const CaptchaModeNumber:數字,CaptchaModeAlphabet:字母,CaptchaModeArithmetic:算術,CaptchaModeNumberAlphabet:數字字母混合.
    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")
}

驗證影象驗證碼

import "github.com/mojocn/base64Captcha"
func verfiyCaptcha(idkey,verifyValue string){
  verifyResult := base64Captcha.VerifyCaptcha(idkey,verifyValue)
  if verifyResult {
    //success
  } else {
    //fail
  }
}

使用golang搭建API服務

// 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,Mode:        0,ComplexOfNoiseText: 0,ComplexOfNoiseDot: 0,}
 
 
// base64Captcha create http handler
func generateCaptchaHandler(w http.ResponseWriter,r *http.Request) {
  //parse request parameters
  //接收客戶端傳送來的請求引數
  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
  //建立base64影象驗證碼
 
  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
  //你也可以是用預設引數 生成影象驗證碼
  //base64Png := captcha.GenerateCaptchaPngBase64StringDefault(captchaId)
 
  //set json response
  //設定json響應
 
  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
  //接收客戶端傳送來的請求引數
  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
  //比較影象驗證碼
  verifyResult := base64Captcha.VerifyCaptcha(postParameters.Id,postParameters.VerifyValue)
 
  //set json response
  //設定json響應
  w.Header().Set("Content-Type","application/json; charset=utf-8")
  body := map[string]interface{}{"code": "error","data": "驗證失敗","msg": "captcha failed"}
  if verifyResult {
    body = map[string]interface{}{"code": "success","data": "驗證通過","msg": "captcha verified"}
  }
  json.NewEncoder(w).Encode(body)
}
 
//start a net/http server
//啟動golang net/http 伺服器
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)
  }
}

執行demo程式碼

cd $GOPATH/src/github.com/mojocn/captcha/examples
go run main.go

訪問 http://localhost:777

到此這篇關於golang包快速生成base64驗證碼的方法的文章就介紹到這了,更多相關golang base64驗證碼內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!