专栏首页嘿dotNet[Hei.Captcha] Asp.Net Core 跨平台图形验证码实现

[Hei.Captcha] Asp.Net Core 跨平台图形验证码实现

写在前面

说起来比较丢脸。我们有个手机的验证码发送逻辑需要使用验证码,这块本来项目里面就有验证码绘制逻辑,.Net Framework的,使用的包是System.Drawing,我把这验证码绘制逻辑复制到.Net Core的新项目引用对比包System.Drawing.Common,windows下面验证码正常,CentOs下面死活不能正常,像这样:

(左边为CentOs运行结果,右为Windows)

  • 依赖库检查安装;
  • 字体检查安装;
  • 逻辑检查;

折腾了一天多放弃了,决定重新写。

我看了市面上的各种验证码,使用第三方的,免费的都有很多限制,并随时有可能开始收费(用户量上去后就收费,俗称“养猪”);

有些比较大平台的已经开始收费或者即将收费(无可厚非,不点名);

视野有限,没有都一一了解到,如果有免费的,限制又比较少的,使用体验不错的第三方验证码,欢迎留言~~

综上,我决定自己绘制

选择图片绘制库

GitHub上面我看到比较多星的是:

SixLabors / ImageSharp

dlemstra / Magick.NET

mono / SkiaSharp

综合考虑后选择了:ImageSharp

官方文档:https://sixlabors.github.io/docs/

成果

Hei.Captcha

.net core,跨平台的验证码生成工具包,支持动态gif验证码。基于ImageSharp

使用.NET Standard 2.0,目前仅测试过.net core的支持,.net frameword 4.6.1 及以上请自行测试~

中文泡泡验证码

字母数字组合验证码

动态gif中文泡泡验证码

动态gif字母数字组合验证码

表单示例

使用

Install-Package Hei.Captcha
//StartUp.cs,Method ConfigureServices()
services.AddHeiCaptcha();
private readonly SecurityCodeHelper _securityCode;

public HomeController(SecurityCodeHelper securityCode)
{
	this._securityCode = securityCode;
}

/// <summary>
/// 泡泡中文验证码 
/// </summary>
/// <returns></returns>
public IActionResult BubbleCode()
{
    var code = _securityCode.GetRandomCnText(2);
    var imgbyte = _securityCode.GetBubbleCodeByte(code);

    return File(imgbyte, "image/png");
}

/// <summary>
/// 数字字母组合验证码
/// </summary>
/// <returns></returns>
public IActionResult HybridCode()
{
    var code = _securityCode.GetRandomEnDigitalText(4);
    var imgbyte = _securityCode.GetEnDigitalCodeByte(code);

    return File(imgbyte, "image/png");
}

/// <summary>
/// gif泡泡中文验证码 
/// </summary>
/// <returns></returns>
public IActionResult GifBubbleCode()
{
    var code = _securityCode.GetRandomCnText(2);
    var imgbyte = _securityCode.GetGifBubbleCodeByte(code);

    return File(imgbyte, "image/gif");
}

/// <summary>
/// gif数字字母组合验证码
/// </summary>
/// <returns></returns>
public IActionResult GifHybridCode()
{
    var code = _securityCode.GetRandomEnDigitalText(4);
    var imgbyte = _securityCode.GetGifEnDigitalCodeByte(code);

    return File(imgbyte, "image/gif");
}

高级

参照Demo, 通过修改/丰富应用程序运行目录./fonts目录下的字体文件,生成更多不同字体组合的验证码。

总结

滑块验证码、点击选择验证码、轨迹验证码等的实现时间成本,技术要求都比较高,并且各种防破解上面可能也需要花很多时间。综合需求考虑选择了个性价比比较高的“土味”验证码绘制方案;

本验证码我自己也没有去尝试去破解过,不知道破解难度,有兴趣的同学试试,能告诉我结果就最好了[比心]

验证码肉眼辨认上面,可能稍难体验差了点。自己修改下泡泡的数量,绘制的参数改改,代码不多,都有备注。

希望能帮到大家,也希望大家积极PR,丰富验证码样式。

源码

喜欢留个星~

https://github.com/gebiWangshushu/Hei.Captcha

参考

https://sixlabors.github.io/docs/

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ASP.NET Core 使用 Google 验证码(reCAPTCHA v3)代替传统验证码

    Google reCAPTCHA(v3下同) 的使用不需要“梯子”,但申请账号的时候需要!

    乔达摩@嘿
  • C# 开发技巧]如何防止程序多次运行 线程 进程

    文章来源 http://www.cnblogs.com/zhili/p/OnlyInstance.html 转载请注明出处

    乔达摩@嘿
  • [C# 开发技巧]如何防止程序多次运行

    最近发现很多人在论坛中问到如何防止程序被多次运行的问题的,如: http://social.msdn.microsoft.com/Forums/zh-CN/63...

    乔达摩@嘿
  • Angular企业级开发(9)-前后端分离之后添加验证码

    1.背景介绍 团队开发的项目,前端基于Bootstrap+AngularJS,后端Spring MVC以RESTful接口给前端调用。开发和部署都是前后端分离。...

    八哥
  • 用Python机器学习搞定验证码

    写爬虫有一个绕不过去的问题就是验证码,现在验证码分类大概有4种: 图像类 滑动类 点击类 语音类 今天先来看看图像类,这类验证码大多是数字、字母的组合,国内也有...

    小小科
  • 微信小程序云开发,快速生成短信验证码

    使用微信小程序云函数实现注册短信验证码的管理,并不是一件分分钟的事,目前想要存储验证码只能放到数据库中,因为存储后才能和用户提交上来的验证码做比较。

    用户4432598
  • 不就是个手机号+验证码登录功能嘛,有这么复杂吗?

    早上开完站会,大壮领了个新任务,要对登录功能做升级,在原来只支持用户名+密码登录模式的基础上,增加手机号+短信验证码动态登录。

    物流IT圈
  • 记一个node实现的图形验证码从0到1

    该包生成的是SVG格式的验证码,较其他的那些验证码有一个优势,基本不需要安装其他的什么依赖(c++之类的)。 而且生成后的数据也不太容易会被破解,因为图片中的文...

    贾顺名
  • 短信验证码的简单实现

    短信验证码是所有 APP 必不可少的基础功能模块之一,这篇文章将会简单的实现这一功能。

    凌虚
  • 记一个node实现的图形验证码从0到1

    记一个node实现的图形验证码从0到1 最近做了一个项目,需要用到给用户发送短信验证码,短信必然走的是第三方的服务。。 so 每一条...

    贾顺名

扫码关注云+社区

领取腾讯云代金券