Golang如何实现简单的验证码功能_Golang验证码生成与校验方法

安装 github.com/dchest/captcha 库;2. 生成图像验证码并返回唯一ID;3. 校验用户输入并自动清除验证码;4. 可配置长度、过期时间等参数。

在Go语言中实现简单的验证码功能,通常包括生成图形验证码(含数字、字母或汉字)并进行校验。这类功能常用于登录、注册等场景,防止机器人恶意请求。下面介绍一种使用 github.com/dchest/captcha 库实现验证码生成与校验的实用方法。

1. 安装 captcha 库

Go 社区有一个广泛使用的图形验证码库:dchest/captcha,支持数字、音频和图像验证码。通过以下命令安装:

go get github.com/dchest/captcha

2. 生成图像验证码

该库默认将验证码存储在内存中,并通过唯一的 ID 进行标识。生成验证码时会返回一个 ID,前端可通过该 ID 获取图片或校验输入。

示例代码:

package main import ( "github.com/dchest/captcha" "net/http" ) func generateCaptcha(w http.ResponseWriter, r *http.Request) { // 生成一个新验证码 ID id := captcha.New() // 设置响应头为图片格式 w.Header().Set("Content-Type", "image/png") // 将验证码图片写入响应 captcha.WriteImage(w, id, 240, 80) // 宽240,高80 }

访问对应路由时,浏览器将显示一张包含随机字符的图片。

3. 校验用户输入的验证码

用户提交表单后,需比对输入值与实际验证码内容。注意:验证码默认区分大小写,建议转为统一格式处理。

func verifyCaptcha(w http.ResponseWriter, r *http.Request) { r.ParseForm() id := r.FormValue("captcha_id") value := r.FormValue("captcha_value") if captcha.VerifyString(id, value) { w.Write([]byte("验证成功")) } else { w.Write([]byte("验证失败")) } }

VerifyString 函数会自动清除已验证的验证码(可配置),防止重放攻击。

4. 配置验证码选项

你可以自定义验证码长度、是否区分大小写、过期时间等:

// 设置验证码长度为6 captcha.SetCustomLength(6) // 设置过期时间为10分钟 captcha.SetExpiration(600) // 关闭大小写敏感 captcha.SetCaseSensitive(false)

这些设置应在程序启动时调用一次即可。

基本上就这些。使用 dchest/captcha 能快速集成安全可靠的验证码功能,无需从零造轮子。适合中小型项目使用。不复杂但容易忽略。