侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

Go  /  管理员 发布于 7年前   383

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 handlerfunc 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 handlerfunc 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/examplesgo run main.go

访问 http://localhost:777

 到此这篇关于golang包快速生成base64验证码的方法的文章就介绍到这了,更多相关golang base64验证码内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


  • 上一条:
    Golang通过小程序获取微信openid的方法示例
    下一条:
    Golang在Mac、Linux、Windows下如何交叉编译的实现
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2017-09
    • 2020-03
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-12
    • 2021-01
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    • 2024-08
    • 2024-11
    • 2025-02
    • 2025-04
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客