golang包快速生成base64验证码的方法

 更新时间:2020年03月12日 10:36:24   作者:林台山人  
这篇文章主要介绍了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包

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,
  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
  //接收客户端发送来的请求参数
  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验证码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 8个Elasticsearch高频面试题和答案整理

    8个Elasticsearch高频面试题和答案整理

    这篇文章为大家精选了8道Elasticsearch高频面试题和答案,并且给出了这些知识点的应用场景、也给出了解决这些问题的思路,希望对大家有所帮助
    2023-06-06
  • 为什么GO不支持循环引用

    为什么GO不支持循环引用

    这篇文章主要介绍的是为什么GO不支持循环引用,学习 Go 语言的开发者越来越多了,很多小伙伴在使用时,就会遇到种种不理解的问题,其中一点就是包的循环引用的报错,下main文章我们一起来看看学习原因
    2021-10-10
  • 详解如何在Golang中监听多个channel

    详解如何在Golang中监听多个channel

    这篇文章主要为大家详细介绍了如何在Golang中实现监听多个channel,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-03-03
  • Go语言实现的简单网络端口扫描方法

    Go语言实现的简单网络端口扫描方法

    这篇文章主要介绍了Go语言实现的简单网络端口扫描方法,实例分析了Go语言网络程序的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • 利用golang和shell计算一个字符串的md5值

    利用golang和shell计算一个字符串的md5值

    这篇文章主要介绍了如何利用golang和shell计算一个字符串的md5值,我们先用shell来计算一下,再去判断golang计算的md5值是否正确,文中有详细的图文介绍,需要的朋友可以参考下
    2024-03-03
  • 一文详解Go语言中的Option设计模式

    一文详解Go语言中的Option设计模式

    这篇文章主要为大家详细介绍了Go语言中Option设计模式的相关知识,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的可以了解一下
    2023-05-05
  • Go 使用Unmarshal将json赋给struct出错的原因及解决

    Go 使用Unmarshal将json赋给struct出错的原因及解决

    这篇文章主要介绍了Go 使用Unmarshal将json赋给struct出错的原因及解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Golang HTTP请求Json响应解析方法以及解读失败的原因

    Golang HTTP请求Json响应解析方法以及解读失败的原因

    这篇文章主要介绍了Golang HTTP请求Json响应解析方法以及解读失败的原因,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • Go Map并发冲突预防与解决

    Go Map并发冲突预防与解决

    这篇文章主要为大家介绍了Go Map并发冲突预防与解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • golang中json的omitempty使用操作

    golang中json的omitempty使用操作

    这篇文章主要介绍了golang中json的omitempty使用操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12

最新评论