首页 > 其他分享 >go 使用验证码库

go 使用验证码库

时间:2023-06-21 18:45:39浏览次数:30  
标签:base64Captcha string driver 验证码 使用 go return id

go 使用验证码库

标签(空格分隔): go

安装

go get github.com/mojocn/base64Captcha

使用

package api

import (
	"github.com/gin-gonic/gin"
	"github.com/mojocn/base64Captcha"
	"go.uber.org/zap"
	"net/http"
)

var (
	// 存储方式
	store = base64Captcha.DefaultMemStore
	// 图片高度
	height = 40
	// 图片宽度
	width = 240
	// 干扰线选项
	showLineOptions = 0 // 2 4 8
	// 干扰数
	noiseCount = 0
	// 验证码长度
	length = 4
	// 字体
	fonts = []string{"wqy-microhei.ttc"}
	// 字符
	stringSource = "1234567890QAZWSXCDERFVBGTYHNMJUIKLOP"
	// 中文
	chineseSource = "你,好,真,香,哈,哈,消,费,者,狗,仔,北京烤鸭"
	// 音频语言
	language = "zh"
	// 最大绝对偏斜系数为个位数
	maxSkew = 0
	// 圆圈的数量
	dotCount = 1
)

// GetCaptcha 获取验证码
func GetCaptcha(ctx *gin.Context) {
	id, b64s, err := CaptchaDigit()
	if err != nil {
		zap.S().Errorln("验证码获取失败:", err)
		ctx.JSON(http.StatusBadRequest, gin.H{"msg": "验证码获取失败"})
		return
	}
	ctx.JSON(http.StatusOK, gin.H{"msg": "success", "data": map[string]interface{}{
		"id":      id,
		"captcha": b64s,
	}})
	return
}

// CheckCaptcha 验证验证码
func CheckCaptcha(ctx *gin.Context) {
	id := ctx.DefaultQuery("id", "")
	value := ctx.DefaultQuery("value", "")
	if id == "" || "" == value {
		ctx.JSON(http.StatusBadRequest, gin.H{"msg": "参数不完整"})
		return
	}
	b := CaptchaVerify(id, value)
	if !b {
		ctx.JSON(http.StatusBadRequest, gin.H{"msg": "验证码错误"})
		return
	}
	ctx.JSON(http.StatusOK, gin.H{"msg": "success"})
	return
}

// CaptchaString 生成字符串验证码
func CaptchaString() (id, b64s string, err error) {
	// 字符串验证码
	driver := &base64Captcha.DriverString{
		Height:          height,
		Width:           width,
		ShowLineOptions: showLineOptions,
		NoiseCount:      noiseCount,
		Source:          stringSource,
		Length:          length,
		Fonts:           fonts,
	}
	driver = driver.ConvertFonts()
	return base64Captcha.NewCaptcha(driver, store).Generate()
}

// CaptchaMath 生成算术验证码
func CaptchaMath() (id, b64s string, err error) {
	driver := &base64Captcha.DriverMath{
		Height:          height,
		Width:           width,
		NoiseCount:      noiseCount,
		ShowLineOptions: showLineOptions,
		Fonts:           fonts,
	}
	driver = driver.ConvertFonts()
	return base64Captcha.NewCaptcha(driver, store).Generate()
}

// CaptchaChinese 生成中文验证码
func CaptchaChinese() (id, b64s string, err error) {
	driver := &base64Captcha.DriverChinese{
		Height:          height,
		Width:           width,
		NoiseCount:      noiseCount,
		ShowLineOptions: showLineOptions,
		Length:          length,
		Source:          chineseSource,
		Fonts:           []string{"wqy-microhei.ttc"},
	}
	driver = driver.ConvertFonts()
	return base64Captcha.NewCaptcha(driver, store).Generate()
}

// CaptchaAudio 生成音频验证码
func CaptchaAudio() (id, b64s string, err error) {
	driver := &base64Captcha.DriverAudio{
		Length: length,
		// "en", "ja", "ru", "zh".
		Language: language,
	}
	return base64Captcha.NewCaptcha(driver, store).Generate()
}

// CaptchaDigit 生成数字验证码
func CaptchaDigit() (id, b64s string, err error) {
	driver := &base64Captcha.DriverDigit{
		Height: height,
		Width:  width,
		Length: length,
		// 最大绝对偏斜系数为个位数
		MaxSkew: 0,
		// 背景圆圈的数量。
		DotCount: 0,
	}
	return base64Captcha.NewCaptcha(driver, store).Generate()
}

func CaptchaVerify(id, value string) bool {
	return store.Verify(id, value, true)
}

标签:base64Captcha,string,driver,验证码,使用,go,return,id
From: https://www.cnblogs.com/yanweifeng/p/17496908.html

相关文章

  • Go-变量篇
    一、变量的声明方式(三种)1、varaint=num2、vara=num3、a:=num二、字符类型使用细节*Golang的字符使用UTF-8.英文-1字节;汉字-3个字节1、字符常量用单引号括起来。eg:varc1byte='a'2、在Go中,字符的本质是一个整数,直接输出时,......
  • Mybatis 开发使用总结2023
    Mybatis一。入门1.mybatis:是一款优秀的持久化框架,用于简化JDBC的开发。2.JDBC3.数据库连接池4.lombok二。mybatis的基础增删改查操作1.驱动:com.mysql.cj.jdbc.Driver2.url:jdbc:mysql://localhost:3306/mybatis3.user:root4.password:123三。mybatis动态sql1.创建sp......
  • Curl使用
     Curl可以模拟用户提交请求模拟登录username='hhh'password='hhh'#如果password进行过加密,含有+的情况下需要转义password=$(echo-n"$password"|sed's/+/%2B/g')response=$(curl-XPOST-d"username=$username&password=$password"&l......
  • 公众号使用gpt具体步骤!
    先分享一下自己的搭的免费的chatGPT网站https://www.hangyejingling.cn/1、搜索公众号【我的Effy】,如图所示:2、直接提问3、如公众号不满足要求。请访问免费网站https://www.hangyejingling.cn/,体验更多功能......
  • 自动化平台总结(httprunner+djangorestframework+python3+Mysql+Vue)【基础构思】
    一、前言最近从零搭建了一个自动化测试平台,虽然不是第一次从零搭建,但是也从来没有进行过这类搭建的总结,还是记录一下,搭建过程中的一些问题和方法。方便以后总结和翻阅二、简介搭建的平台使用的是Python3.6,未来有空可能考虑加个java版本。前端用的Vue,主体是httprunner2.......
  • MongodChangeStream不生效
    interfaceChatMessageListener<T>extendsMessageListener<ChangeStreamDocument<Document>,T>{}1.检查mongodb是否启用了replicasets,参考配置https://stackoverflow.com/questions/59571945/the-changestream-stage-is-only-supported-on-replica-sets-error-......
  • 公众号使用gpt具体步骤
    ####先分享一下自己的搭的免费的chatGPT网站<ahref="https://www.hangyejingling.cn/"style="color:red;">https://www.hangyejingling.cn/</a>##1、搜索公众号【我的Effy】,如图所示: ##2、直接提问 3、若问题答案较长可稍等一会按1。如不满足要求请访问免费网......
  • MongoDB学习笔记
    MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存......
  • centos 安装mongodb
    在CentOS系统中安装MongoDB可以按照以下步骤进行:配置MongoDB的Yum仓库sudovi/etc/yum.repos.d/mongodb-org-4.4.repo在编辑器中输入以下内容:[mongodb-org-4.4]name=MongoDBRepositorybaseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.......
  • [C#] 使用代码打开网络适配器界面
    在win7以上系统中,进入网络适配器至少需要鼠标点击三下,对于网络设备调试非常不友好,需求在自己的diytools中添加一键打开功能System.Diagnostics.Process.Start("cmd.exe","/Ccontrol/nameMicrosoft.NetworkandSharingCenter");///C关闭窗体/K不关闭 可能需要......