🏆作者:科技、互联网行业优质创作者
🏆专注领域:.Net技术、软件架构、人工智能、数字化转型、DeveloperSharp、微服务、工业互联网、智能制造
🏆欢迎关注我(Net数字智慧化基地),里面有很多高价值技术文章,是你刻苦努力也积累不到的经验,能助你快速成长。升职+涨薪!!
基于.Net 的图形验证码模块
LazyCaptcha
LazyCaptcha v2(基于SkiaSharp)
介绍
仿EasyCaptcha和SimpleCaptcha,基于.Net Standard 2.0 的图形验证码模块。 v2是指版本号>=2.0.0的版本,<2.0.0则称为v1。 v1基于ImageSharp,v2基于SkiaSharp。SkiaSharp性能更好,但发布到linux时需要安装对应NativeAssets(ImageSharp则不需要)。
滑动验证码请移步lazy-slide-captcha。
在线演示
效果展示
CaptchaType | 字体 | 静态图 | 动图 |
DEFAULT (0) | Actionj | ||
CHINESE (1) | kaiti | ||
NUMBER (2) | Fresnel | ||
NUMBER_ZH_CN (3) | kaiti | ||
NUMBER_ZH_HK (4) | kaiti | ||
WORD (5) | Epilog | ||
WORD_LOWER (6) | Epilog | ||
WORD_UPPER (7) | Epilog | ||
WORD_NUMBER_LOWER (8) | Epilog | ||
WORD_NUMBER_UPPER (9) | Epilog | ||
ARITHMETIC (10) | Epilog | ||
ARITHMETIC_ZH (11) | kaiti |
字体 | 图片 | 字体 | 图片 |
Actionj | Epilog | ||
Fresnel | Headache | ||
Kaiti | Lexo | ||
Prefix | Progbot | ||
Ransom | Robot | ||
Scandal |
安装
-
• Package Manager
Install-Package Lazy.Captcha.Core
-
• .NET CLI
dotnet add package Lazy.Captcha.Core
linux环境下运行,请安装SkiaSharp.NativeAssets.Linux包,更多细节请查看SkiaSharp官方文档。
使用说明
1. 注册服务
// 默认使用内存存储(AddDistributedMemoryCache)
builder.Services.AddCaptcha(builder.Configuration);// 如果使用redis分布式缓存
//builder.Services.AddStackExchangeRedisCache(options =>
//{
// options.Configuration = builder.Configuration.GetConnectionString("RedisCache");
// options.InstanceName = "captcha:";
//});
2. 配置
appsettings.json (不提供配置时,使用默认配置)
{"ConnectionStrings": {// 使用Redis缓存时,需要配置此项// 使用格式参考 Microsoft.Extensions.Caching.StackExchangeRedis"RedisCache": "localhost,password=Aa123456."},"CaptchaOptions": {"CaptchaType": 5, // 验证码类型"CodeLength": 4, // 验证码长度, 要放在CaptchaType设置后 当类型为算术表达式时,长度代表操作的个数"ExpirySeconds": 60, // 验证码过期秒数"IgnoreCase": true, // 比较时是否忽略大小写"StoreageKeyPrefix": "", // 存储键前缀"ImageOption": {"Animation": false, // 是否启用动画"FontSize": 32, // 字体大小"Width": 100, // 验证码宽度"Height": 40, // 验证码高度"BubbleMinRadius": 5, // 气泡最小半径"BubbleMaxRadius": 10, // 气泡最大半径"BubbleCount": 3, // 气泡数量"BubbleThickness": 1.0, // 气泡边沿厚度"InterferenceLineCount": 4, // 干扰线数量"FontFamily": "kaiti", // 包含actionj,epilog,fresnel,headache,lexo,prefix,progbot,ransom,robot,scandal,kaiti"FrameDelay": 15, // 每帧延迟,Animation=true时有效, 默认30"BackgroundColor": "#ffff00", // 格式: rgb, rgba, rrggbb, or rrggbbaa format to match web syntax, 默认#fff"ForegroundColors": "", // 颜色格式同BackgroundColor,多个颜色逗号分割,随机选取。不填,空值,则使用默认颜色集"Quality": 100, // 图片质量(质量越高图片越大,gif调整无效可能会更大)"TextBold": false // 粗体,该配置2.0.3新增}}
}
配置可以通过运行Sample.Winfrom生成或直接下载Release运行。
代码配置
// 全部配置
builder.Services.AddCaptcha(builder.Configuration, option =>
{option.CaptchaType = CaptchaType.WORD; // 验证码类型option.CodeLength = 6; // 验证码长度, 要放在CaptchaType设置后. 当类型为算术表达式时,长度代表操作的个数option.ExpirySeconds = 30; // 验证码过期时间option.IgnoreCase = true; // 比较时是否忽略大小写option.StoreageKeyPrefix = ""; // 存储键前缀option.ImageOption.Animation = true; // 是否启用动画option.ImageOption.FrameDelay = 30; // 每帧延迟,Animation=true时有效, 默认30option.ImageOption.Width = 150; // 验证码宽度option.ImageOption.Height = 50; // 验证码高度option.ImageOption.BackgroundColor = SixLabors.ImageSharp.Color.White; // 验证码背景色option.ImageOption.BubbleCount = 2; // 气泡数量option.ImageOption.BubbleMinRadius = 5; // 气泡最小半径option.ImageOption.BubbleMaxRadius = 15; // 气泡最大半径option.ImageOption.BubbleThickness = 1; // 气泡边沿厚度option.ImageOption.InterferenceLineCount = 2; // 干扰线数量option.ImageOption.FontSize = 36; // 字体大小option.ImageOption.FontFamily = DefaultFontFamilys.Instance.Actionj; // 字体/* * 中文使用kaiti,其他字符可根据喜好设置(可能部分转字符会出现绘制不出的情况)。* 当验证码类型为“ARITHMETIC”时,不要使用“Ransom”字体。(运算符和等号绘制不出来)*/option.ImageOption.TextBold = true;// 粗体,该配置2.0.3新增
});
3. Controller
[Route("captcha")]
[ApiController]
public class CaptchaController : Controller
{private readonly ICaptcha _captcha;public CaptchaController(ICaptcha captcha){_captcha = captcha;}[HttpGet]public IActionResult Captcha(string id){var info = _captcha.Generate(id);// 有多处验证码且过期时间不一样,可传第二个参数覆盖默认配置。//var info = _captcha.Generate(id,120);var stream = new MemoryStream(info.Bytes);return File(stream, "image/gif");}/// <summary>/// 演示时使用HttpGet传参方便,这里仅做返回处理/// </summary>[HttpGet("validate")]public bool Validate(string id, string code){return _captcha.Validate(id, code);}/// <summary>/// 多次校验(https://gitee.com/pojianbing/lazy-captcha/issues/I4XHGM)/// 演示时使用HttpGet传参方便,这里仅做返回处理/// </summary>[HttpGet("validate2")]public bool Validate2(string id, string code){return _captcha.Validate(id, code, false);}
}
项目地址
项目地址:https://gitee.com/pojianbing/lazy-captcha
🏆欢迎关注我(Net数字智慧化基地),里面有很多高价值技术文章,是你刻苦努力也积累不到的经验,能助你升职+涨薪!!
🏆点击下方卡片关注公众号,里面有很多大佬的技术文章,能助你快速成长。还可免费领取如下15个视频教程!回复'面试',获取C#/.NET/.NET Core面试宝典
回复'C#',领取零基础学习C#编程
回复'NET',领取.NET零基础入门到实战
回复'Linux',领取Linux从入门到精通
回复'wpf',领取高薪热门【WPF上位机+工业互联网】从零手写实战
回复'Modbus',领取初识C#+上位机Modbus通信
回复'PLC',领取C#语言与西门子PLC的通信实操
回复'blazor',领取blazor从入门到实战
回复'TypeScript',领取前端热门TypeScript系统教程
回复'vue',领取vue前端从入门到精通
回复'23P',领取C#实现23种常见设计模式
回复'MongoDB',领取MongoDB实战
回复'Trans',领取分布式事务
回复'Lock',领取分布式锁实践
回复'Docker',领取微服务+Docker综合实战
回复'K8s',领取K8s部署微服务
回复'加群',进.NET技术社区交流群