go语言生成图片验证码 | 豆包MarsCode AI刷题

279 阅读2分钟

1.效果展示

base64转图片网址:在线Base64转图片 1731575128128.png

2.编写图形验证码接口

1.安装 base64Captcha 库

"github.com/mojocn/base64Captcha"

2.编写代码

1.导入包:

github.com/gin-gonic/gin:Gin 框架,用于处理 HTTP 请求。 github.com/mojocn/base64Captcha:生成验证码的库。 go.uber.org/zap:日志库,用于记录日志。 go_gin/Response:自定义的响应处理库。 net/http:标准库,用于处理 HTTP 状态码。

2.全局变量:

store:一个全局变量,用于存储生成的验证码。这里使用了 base64Captcha 提供的默认内存存储。 函数 GetCaptcha: GetCaptcha 是一个处理函数,接收一个 *gin.Context 类型的参数 ctx,用于处理 HTTP 请求和响应。

3.创建验证码驱动:

使用 base64Captcha.NewDriverDigit 创建一个数字类型的验证码驱动,参数包括字体大小、图片宽度、验证码字符数、噪声强度和干扰线条数。

4.创建验证码实例:

使用 base64Captcha.NewCaptcha 创建一个验证码实例,传入前面创建的驱动和存储。

5.生成验证码:

调用 cp.Generate 方法生成验证码,返回验证码的 ID 和图片的 Base64 编码字符串。 如果生成验证码时发生错误,记录错误日志并返回一个内部服务器错误的响应。

6.返回成功响应:

如果验证码生成成功,调用 Response.Success 方法返回一个成功的响应,包含验证码的 ID 和图片的 Base64 编码字符串。

7.完整代码

package controller

import (
	"github.com/gin-gonic/gin"
	"github.com/mojocn/base64Captcha"
	"go.uber.org/zap"
	"go_gin/Response"
	"net/http"
)
// base64Captcha  缓存对象
var store = base64Captcha.DefaultMemStore
// GetCaptcha 获取验证码
func GetCaptcha(ctx *gin.Context) {
	//
	driver := base64Captcha.NewDriverDigit(80, 240, 5, 0.7, 80)
	cp := base64Captcha.NewCaptcha(driver, store)
	// b64s是图片的base64编码
	id, b64s, err := cp.Generate()
	if err != nil {
		zap.S().Errorf("生成验证码错误,:%s ", err.Error())
		Response.Err(ctx, http.StatusInternalServerError, 500, "生成验证码错误", "")
		return
	}
	Response.Success(ctx, 200, "生成验证码成功", gin.H{
		"captchaId": id,
		"picPath":   b64s,
	})
}

3.给验证码接口添加路由

package router

import (
    "Founction/controller"
    "github.com/gin-gonic/gin"
)

// InitBaseRouter 图形验证码的路由
func InitBaseRouter(Router *gin.RouterGroup) {
    BaseRouter := Router.Group("base")
    {
       // 获取图片验证码
       BaseRouter.GET("captcha", controller.GetCaptcha)
    }
}
  • func InitBaseRouter(Router *gin.RouterGroup):定义一个函数 InitBaseRouter,接收一个 *gin.RouterGroup 类型的参数 Router,用于注册路由。
  • BaseRouter := Router.Group("base"):在传入的 Router 上创建一个名为 base 的路由组。 { ... }:在 BaseRouter 组内定义具体的路由规则。
  • BaseRouter.GET("captcha", controller.GetCaptcha):在 base 路由组下添加一个 GET 路由 /captcha,并将其处理函数设置为 controller.GetCaptcha。

4.在main函数中编写测试

1731575890801.png

5.结果验证

在postman中输入你自己的路由地址,比如我的:http://127.0.0.1:8021/v1/base/captcha

1731575996908.png

点击发送后得到以下结果

1731576023341.png

最后将生成的base64编码搁到专门的转码网站上就可以转化为图片, 例如:在线Base64转图片

最后结果:

1731576169155.png

这就是完整的流程设计了,感谢各位老铁的观看。