写在前面

说起来比较丢脸。我们有个手机的验证码发送逻辑需要使用验证码,这块本来项目里面就有验证码绘制逻辑,.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/

最新文章

  1. Web API与文件操作
  2. this的指向(慢慢添加)
  3. MySQL(四) 数据表的插入、更新、删除数据
  4. 使用Apache的.htaccess就可以防盗链
  5. signtool
  6. Android Studio debug使用release的签名
  7. 写在Ruby之前。
  8. Eclipse 调试 Java 程序的技巧
  9. Android XListView实现原理讲解及分析
  10. Linux Bash Shell入门教程
  11. zookeeper + dubbo + spring boot
  12. linux学习(七)环境变量、cp、mv、cat,less,more,head,tail
  13. UVA11636-Hello World!-水题
  14. [国嵌笔记][025][ARM指令分类学习]
  15. Asp.Net Core 轻松学-利用 Swagger 自动生成接口文档
  16. Chain TDNN/LSTM的拼帧索引、延时
  17. paiza
  18. servlet_filter简介
  19. MongoDB集群搭建之副本集模仿主从模式的行为
  20. Android图片变形,ImageView属性的设置。

热门文章

  1. spring 5.x 系列第4篇 —— spring AOP (代码配置方式)
  2. Java8新特性——lambda表达式.(案例:词频统计)
  3. GitLab通过API创建项目
  4. C语言版数据结构笔记
  5. ZOJ 3955:Saddle Point(思维)
  6. (转)Java 8 中的 Streams API 详解
  7. 前端从零开始学习Graphql
  8. C语言学习书籍推荐《学习使用C指针(影印版)(英文本)》下载
  9. 详解rel 属性及noflow
  10. Fiolki题解