Go 之 captcha 生成图像验证码

目前 chptcha 好像只可以生成纯数字的图像验证码,不过对于普通简单应用来说也足够了。captcha默认将store封装到内部,未提供对外操作的接口,因此使用自己显式生成的store,可以通过store自定义要生成的验证码。

package mainimport ("bytes""fmt""github.com/dchest/captcha""log""os"
)// Captcha 方便后期扩展
type Captcha struct{}// 单例
var captchaInstance *Captchafunc Instance() *Captcha {if captchaInstance == nil {captchaInstance = &Captcha{}}return captchaInstance
}// CreateImage 创建图片验证码
func (this *Captcha) CreateImage() string {length := captcha.DefaultLencaptchaId := captcha.NewLen(length)return captchaId
}// Reload 重载
func (this *Captcha) Reload(captchaId string) bool {return captcha.Reload(captchaId)
}// Verify 验证
func (this *Captcha) VerifyString(captchaId, val string) bool {return captcha.VerifyString(captchaId, val)
}func (this *Captcha) Verify(captchaId string, digits []byte) bool  {return captcha.Verify(captchaId, digits)
}// GetImageByte 获取图片二进制流
func (this *Captcha) GetImageByte(captchaId string) []byte {var content bytes.Buffererr := captcha.WriteImage(&content, captchaId, captcha.StdWidth, captcha.StdHeight)if err != nil {log.Println(err)return nil}return content.Bytes()
}// WriteImageFile 写图片文件
func (this *Captcha) WriteImageFile(b []byte, file string) {f, err := os.OpenFile(file, os.O_CREATE | os.O_RDWR, os.ModePerm)defer f.Close()if err != nil {log.Println(err)}f.Write(b)
}func main() {// capt := Instance()// captId := capt.CreateImage()// capt.WriteImageFile(capt.GetImageByte(captId), "test.png")// captcha默认将store封装到内部,未提供对外操作的接口// 使用自己显式生成的store,可以通过store自定义要生成的图形验证码store := captcha.NewMemoryStore(captcha.CollectNum, captcha.Expiration)captcha.SetCustomStore(store)capt := Instance()captId := capt.CreateImage()b := []byte{6, 6, 6, 8, 8, 8}store.Set(captId, b)// store.Set(captId, captcha.RandomDigits(6))fmt.Println(store.Get(captId, false))capt.WriteImageFile(capt.GetImageByte(captId), "test.png")// vs := capt.VerifyString(captId, "666888")v := capt.Verify(captId, b)if v {fmt.Println("verify succeed")} else {fmt.Println("verify failed")}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/189331.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jmeter 如何监控目标服务的系统资源

下载Jmeter插件管理下载 perfmon 将这个插件管理放到Jmeter的\lib\ext目录下 然后重启Jmeter jmeter-plugins-manager-1.10.jar 下载 perfmon插件 添加 io 内存 磁盘的监听 并且添加监听 在宿主机中安装代理监听程序 并启动 ServerAgent.tar.gz

机器学习第5天:多项式回归与学习曲线

文章目录 多项式回归介绍 方法与代码 方法描述 分离多项式 学习曲线的作用 场景 学习曲线介绍 欠拟合曲线 示例 结论 过拟合曲线 示例 ​结论 多项式回归介绍 当数据不是线性时我们该如何处理呢,考虑如下数据 import matplotlib.pyplot as plt impo…

Docker与Kubernetes结合的难题与技术解决方案

文章目录 1. **版本兼容性**技术解决方案 2. **网络通信**技术解决方案 3. **存储卷的管理**技术解决方案 4. **安全性**技术解决方案 5. **监控和日志**技术解决方案 6. **扩展性与自动化**技术解决方案 7. **多集群管理**技术解决方案 结语 🎈个人主页&#xff1a…

服务器数据恢复—热备盘同步中断导致Raid5数据丢失的数据恢复案例

服务器数据恢复环境: 某单位一台服务器上有一组raid5阵列,该raid5阵列有15块成员盘。上层是一个xfs裸分区,起始位置是0扇区。 服务器故障&检测: 服务器raid5阵列中有硬盘性能表现不稳定,但是由于管理员长时间没有关…

小程序授权获取头像

wxml <view class"header"><text>头像</text><button class"butt" plain"true" open-type"chooseAvatar" bind:chooseavatar"chooseAvatar"><image src"{{HeadUrl}}" mode"&quo…

Python实验项目7 :tkinter GUI编程

&#xff08;1&#xff09;利用tkinter 制作界面&#xff0c;效果图如下&#xff1a; from tkinter import * # winTk() for i in range(1,20):Button(width5,height10,bg"black" if i%20 else"white").pack(side"left") win.geometry("8…

联想Win11系统的任务栏格式调整为居中或居左

一 .目的 联想Win11系统的任务栏格式调整为居中或居左 二 .方法 2.1 鼠标任意放到电脑桌面位置&#xff0c;点击鼠标右键&#xff0c;显示后县级【显示设置】 2.2 个性化→任务栏→任务栏行为→对其方式&#xff1a;按需或个人习惯进行选择【靠左】 2.3 成功调整&#x…

BUG 随想录 - Java: 程序包 com.example.xxx 不存在

目录 一、BUG 复现 二、解决问题 一、BUG 复现 背景&#xff1a;通过 feign 的最佳实践&#xff0c;将 feign 单独提取成一个微服务&#xff0c;接着在需要远程调用的微服务中引入 feign 模块&#xff0c;并在启动类通过 EnableFeignClients 声明指定的 Feign 客户端. 出现问题…

【数据结构与算法】JavaScript实现双向链表

文章目录 一、双向链表简介二、封装双向链表类2.0.创建双向链表类2.1.append(element)2.2.toString()汇总2.3.insert(position,element)2.4.get(position)2.5.indexOf(element)2.7.update(position,element)2.8.removeAt(position)2.9.其他方法2.10.完整实现 三、链表结构总结3…

nginx学习(1)

一、下载安装NGINX&#xff1a; 先安装gcc-c编译器 yum install gcc-c yum install -y openssl openssl-devel&#xff08;1&#xff09;下载pcre-8.3.7.tar.gz 直接访问&#xff1a;http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz&#xff0c;就…

硬件开发笔记(十二):RK3568底板电路电源模块和RTC模块原理图分析

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/134429973 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

深度学习论文解读:比较ResNet和ViT差异

前言 计算机视觉、机器学习&#xff0c;这两个词会让你想到什么&#xff1f; 相信绝大多数人第一反应都是CNN&#xff0c;而持续关注这些领域发展的人&#xff0c;则会进一步联想到近几年大火的Transformer&#xff0c;它不仅在自然语言相关任务上表现优秀&#xff0c;在图像…