基于.Net 的图形验证码模块

 🏆作者:科技、互联网行业优质创作者
🏆专注领域:.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技术社区交流群 

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

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

相关文章

ARM TrustZone技术解析:构建嵌入式系统的安全扩展基石

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-dSk2aQ85ZR0zxnyI {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

【Python】科研代码学习:七 TrainingArguments,Trainer

【Python】科研代码学习&#xff1a;七 TrainingArguments&#xff0c;Trainer TrainingArguments重要的方法 Trainer重要的方法使用 Trainer 的简单例子 TrainingArguments HF官网API&#xff1a;Training 众所周知&#xff0c;推理是一个大头&#xff0c;训练是另一个大头 之…

微信小程序(五十三)修改用户头像与昵称

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.外界面个人资料基本模块 2.资料修改界面同步问题实现&#xff08;细节挺多&#xff0c;考虑了后期转服务器端的方便之处&#xff09; 源码&#xff1a; app.json {"window": {},"usingCompone…

盘点CSV文件在Excel中打开后乱码问题的两种处理方法

目录 一、CSV文件乱码问题概述 二、修改文件编码格式 1.识别CSV文件编码 2.修改编码格式 3.在Excel中打开修改后的CSV文件 案例 三、利用文本编辑器进行预处理 1.打开CSV文件并检查乱码 2.替换或删除乱码字符 3.保存并导入Excel 案例 四、注意事项 1、识别原始编码…

vulhub中Weblogic WLS Core Components 反序列化命令执行漏洞复现(CVE-2018-2628)

Oracle 2018年4月补丁中&#xff0c;修复了Weblogic Server WLS Core Components中出现的一个反序列化漏洞&#xff08;CVE-2018-2628&#xff09;&#xff0c;该漏洞通过t3协议触发&#xff0c;可导致未授权的用户在远程服务器执行任意命令。 访问http://your-ip:7001/consol…

CodeReview 规范及实施

优质博文&#xff1a;IT-BLOG-CN 一、为什么需要CodeReview 随着业务压力增大&#xff0c;引发代码质量下降&#xff0c;代码质量的下降导致了开发效率的降低&#xff0c;维护成功高等问题&#xff0c;开发效率下降后又加重了业务压力&#xff0c;最终陷入了死亡三角的内耗之…

腾讯云服务器99元一年厉害了,老用户可以买,续费也是99元

良心腾讯云推出99元一年服务器&#xff0c;新用户和老用户均可以购买&#xff0c;续费不涨价&#xff0c;续费也是99元&#xff0c;配置为轻量2核2G4M、50GB SSD盘、300GB月流量、4M带宽&#xff1a;优惠价格99元一年&#xff0c;续费99元&#xff0c;官方活动页面 txybk.com/g…

Linux/Windows下部署OpenCV环境(Java/SpringBoot/IDEA)

环境 本文基于Linux&#xff08;CentOS 7&#xff09;、SpringBoot部署运行OpenCV 4.5.5&#xff0c;并顺带记录Windows/IDEA下如何调试SpringBoot调用OpenCV项目。 Windows下调试 首先我们编写代码&#xff0c;并在Windows/IDEA下调试通过。 下载Windows版安装包&#xff0…

第108讲:Mycat实践指南:枚举分片下的水平分表详解

文章目录 1.枚举分片的概念2.水平分表枚举分片案例2.1.准备测试的表结构2.2.配置Mycat实现枚举分片的水平分表2.2.1.配置Schema配置文件2.2.2.配置Rule分片规则配置文件2.2.3.配置Server配置文件2.2.4.重启Mycat 2.3.写入数据观察水平分表效果 1.枚举分片的概念 枚举分片是根据…

Python 负载测试工具库之locust使用详解

概要 在当今的互联网时代,负载测试是确保应用程序和网站性能稳定的关键步骤之一。Python Locust是一个强大的开源负载测试工具,它可以模拟大量用户并测量应用程序的性能。本文将提供有关Python Locust的全面指南,包括安装和配置、基本概念、性能测试、任务编写、报告生成以…

龙年新征程!凌恩生物2月客户文章累计IF>300

2024年2月&#xff0c;凌恩生物助力客户发表文章47篇&#xff08;6篇预发表&#xff09;&#xff0c;累计影响因子317.3分&#xff0c;其中包括Advanced Materials、Microbiome、Journal of Hazardous Materials、Small、Molecular Psychiatry、Science of the Total Environme…

MySQL 学习笔记(基础篇 Day3)

「写在前面」 本文为黑马程序员 MySQL 教程的学习笔记。本着自己学习、分享他人的态度&#xff0c;分享学习笔记&#xff0c;希望能对大家有所帮助。推荐先按顺序阅读往期内容&#xff1a; 1. MySQL 学习笔记&#xff08;基础篇 Day1&#xff09; 2. MySQL 学习笔记&#xff08…