使用.Net Core实现的一个图形验证码
SimpleCaptcha是一个使用简单,基于.Net Standard 2.0的图形验证码模块。它的灵感来源于Edi.Wang的这篇文章https://edi.wang/post/2018/10/13/generate-captcha-code-aspnet-core,我将其中生成验证码的代码抽取出来进行封装得到了这个模块。下面介绍一下使用方式。
基本使用方式
安装SimpleCaptcha
在Nuget中搜索安装SimpleCaptcha

安装缓存模块
SimpleCaptcha依赖Microsoft.Extensions.Caching.Abstractions模块用来存储验证码,所以你需要在项目中根据自己的需要安装相应的实现包,例如这里我使用Microsoft.Extensions.Caching.Memory
Startup
修改Startup.cs文件注入相应的服务:
services.AddMemoryCache()
.AddSimpleCaptcha(builder =>
{
builder.UseMemoryStore();
});
注入ICaptcha接口
在Controller中注入核心接口ICaptcha
private readonly ICaptcha _captcha;
public HomeController(ICaptcha captcha)
{
_captcha = captcha;
}
生成验证码
使用ICaptcha接口的Generate方法生成验证码
public IActionResult Captcha(string id)
{
var info = _captcha.Generate(id);
var stream = new MemoryStream(info.CaptchaByteData);
return File(stream, "image/png");
}
验证
使用ICaptcha接口的Validate方法对用户的提交进行验证
public IActionResult Validate(string id, string code)
{
var result = _captcha.Validate(id, code);
return Json(new { success = result });
}
完整的例子可以在这里找到:https://github.com/1992w/SimpleCaptcha/tree/master/src/SimpleCaptcha.Demo
配置
SimpleCaptcha预留了一些默认的配置项,你可以根据需要自行修改。
设置验证码长度
services.AddSimpleCaptcha(builder =>
{
builder.AddConfiguration(options =>
{
options.CodeLength = 6;
});
});
设置图片大小
services.AddSimpleCaptcha(builder =>
{
builder.AddConfiguration(options =>
{
options.ImageWidth = 100;
options.ImageHeight = 36;
});
});
设置区分大小写
默认情况下验证不区分大小写
services.AddSimpleCaptcha(builder =>
{
builder.AddConfiguration(options =>
{
options.IgnoreCase = false;
});
});
设置验证码有效期
验证码默认的有效期为5分钟
services.AddSimpleCaptcha(builder =>
{
builder.AddConfiguration(options =>
{
options.ExpiryTime =TimeSpan.FromMinutes(10);
});
});
设置字符集
SimpleCaptcha提供了ICaptchaCodeGenerator接口用来生成字符,默认的实现是从字符集012346789ABCDEFGHIJKLMNOPQRSTUVWXYZ中随机生成,你可以继承ICaptchaCodeGenerator接口实现自己的需求。
public class MyCaptchaCodeGenerator : ICaptchaCodeGenerator
{
public string Generate(int length)
{
throw new NotImplementedException();
}
}
配置自己的生成器
services.AddSimpleCaptcha(builder =>
{
builder.AddConfiguration(options =>
{
options.CodeGenerator = new MyCaptchaCodeGenerator();
});
});
设置个性化的图片
如果默认生成的图片你觉得不符合你的要求,你可以实现ICaptchaImageGenerator接口进行修改
public class CaptchaImageGenerator : ICaptchaImageGenerator
{
public byte[] Generate(int width, int height, string captchaCode)
{
throw new NotImplementedException();
}
}
services.AddSimpleCaptcha(builder =>
{
builder.AddConfiguration(options =>
{
options.ImageGenerator = new CaptchaImageGenerator();
});
});
源代码
所有源代码可以在这里获取:https://github.com/1992w/SimpleCaptcha
感谢
在这里感谢Edi.Wang分享。
最后
欢迎你对这个模块提出任何的建议和想法。
使用.Net Core实现的一个图形验证码的更多相关文章
- 程序员不装x能行?先给登录来一个图形验证码!(canvas实现)
细心的同学可以发现,现在很多网站当登录多次之后就会出现一个图形验证码,或是当提交表单.或点击获取手机验证码等等场景都会有图形验证码的出现. 那么图形验证码是为了解决什么问题而出现的呢? 什么是图形验证 ...
- ASP.NET中如何生成图形验证码
通常生成一个图形验证码主要 有3个步骤: (1)随机产生一个长度为N的随机字符串,N的值可由开发可由开发人员自行设置.该字符串可以包含数字.字母等. (2)将随机生成的字符串创建成图片,并显示. (3 ...
- Tornado框架实现图形验证码功能
图形验证码是项目开发过程中经常遇到的一个功能,在很多语言中都有对应的不同形式的图形验证码功能的封装,python 中同样也有类似的封装操作,通过绘制生成一个指定的图形数据,让前端HTML页面通过链接获 ...
- 笔记——Springboot response、ServletOutputStream、图形验证码显示慢
今天遇到一个图形验证码加载很慢的问题,大概耗时有200~500毫秒左右. 根据追踪,图形验证码图片生成耗时0~1毫秒,而response.getOutputStream.write()将图片写入前台页 ...
- 前端登录jq图形验证码
<!DOCTYPE html><html lang="zh"><head> <meta charset="UTF-8" ...
- 【web 安全测试思路】图形验证码对服务器的影响
前言 图片验证码是为了防止恶意破解密码.刷票.论坛灌水等才出现的,但是你有没有想过,你的图形验证码竟然可能导致服务器的崩溃? 利用过程 这里以phpcms为例,首先需要找一个图形验证码. 将图片拖动到 ...
- jmeter 获取图形验证码接口测试
今天开发提测了一个图形验证码的接口,以前没有测过这个,上来有点懵..... 记录一下. 使用jmeter配置好接口和参数,运行后查看结果树,显示都是乱码 解决方法: 添加一个后置处理器--beansh ...
- SpringSceurity(3)---图形验证码功能实现
SpringSceurity(3)---图形验证码功能实现 有关springSceurity之前有写过两篇文章: 1.SpringSecurity(1)---认证+授权代码实现 2.SpringSec ...
- 【java+selenium3】自动化cookie操作+图形验证码处理 (十五)
一.cookie操作 1.获取浏览器所有的cookie import java.util.Set; import org.openqa.selenium.Cookie; //获取浏览器所有的cooki ...
随机推荐
- Java实现 蓝桥杯 算法提高 成绩排序2
试题 算法提高 成绩排序2 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给出n个学生的成绩,将这些学生按成绩排序,排序规则:总分高的在前:总分相同,数学成绩高的在前:总分与数学相 ...
- Java实现蓝桥杯历届试题区间移位
问题描述 数轴上有n个闭区间D1,-,Dn.其中区间Di用一对整数[ai, bi]来描述,满足ai < bi.已知这些区间的长度之和至少有10000.所以,通过适当的移动这些区间,你总可以使得他 ...
- Linux命令总结大全,包含所有linux命令
使用说明:此文档包含所有的Linux命令,只有你想不到的没有你看不到的,此文档共计10万余字,有8400多行,预计阅读时间差不多需要3个小时左右,所以要给大家说一说如何阅读此文档 为了方便大家阅读,我 ...
- 第一次前端实习机试题 很粗糙的一个天气预报demo
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- Spring之多数据源切换的应用
这不是一个新的知识点扩展,顶多算是,Spring的AOP特性的一个应用.那么下面开始今天的学习之旅! 场景 数据库读写分离,或者分库,总之多数据源的场景,怎么样实现自动切换(PS:不考虑各种分库分表的 ...
- [CentOS 7]挂载ntfs格式U盘
在我们将U盘插入装有CentOS的系统时,经常会出现如图所示的错误提示.这是因为linux系统并不能兼容NTFS的文件系统.其解决方法如下(建议先进入root模式): 1.首先下载"ntfs ...
- Windows 程序设计(4) MFC-01前置知识
1. Windows编程简介 1.0 开发环境 操作系统 Win10 IDE: VS2017 1.1 Windows程序简介 Windows程序呢也主要分那么几种,例如:exe的可执行程序,dll的动 ...
- rust 学习之旅一, rust编程环境相关
Mac rust环境 rust安装: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh rust更新: rustup upd ...
- Spring系列.事务管理
Spring提供了一致的事务管理抽象.这个抽象是Spring最重要的抽象之一, 它有如下的优点: 为不同的事务API提供一致的编程模型,如JTA.JDBC.Hibernate和MyBatis数据库层 ...
- Java中在数字前自动补零方法
/** * 数字前面自动补零 * @param number 数字 * @return */ public static String geFourNumber(int number){ Number ...