[Hei.Captcha] Asp.Net Core 跨平台圖形驗證碼實現


1564587704793

寫在前面

說起來比較丟臉。我們有個手機的驗證碼發送邏輯需要使用驗證碼,這塊本來項目里面就有驗證碼繪制邏輯,.Net Framework的,使用的包是System.Drawing,我把這驗證碼繪制邏輯復制到.Net Core的新項目引用對比包System.Drawing.Common,windows下面驗證碼正常,CentOs下面死活不能正常,像這樣:

1564588228422

(左邊為CentOs運行結果,右為Windows)

  • 依賴庫檢查安裝;
  • 字體檢查安裝;
  • 邏輯檢查;

折騰了一天多放棄了,決定重新寫。

我看了市面上的各種驗證碼,使用第三方的,免費的都有很多限制,並隨時有可能開始收費(用戶量上去后就收費,俗稱“養豬”);

有些比較大平台的已經開始收費或者即將收費(無可厚非,不點名);

視野有限,沒有都一一了解到,如果有免費的,限制又比較少的,使用體驗不錯的第三方驗證碼,歡迎留言~~

綜上,我決定自己繪制

選擇圖片繪制庫

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

SixLabors / ImageSharp

dlemstra / Magick.NET

mono / SkiaSharp

綜合考慮后選擇了:ImageSharp

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

成果

Hei.Captcha

Hei.Captcha

.net core,跨平台的驗證碼生成工具包,支持動態gif驗證碼。基於ImageSharp

使用.NET Standard 2.0,目前僅測試過.net core的支持,.net frameword 4.6.1 及以上請自行測試~

中文泡泡驗證碼

img

1564563919705

1564563740706

字母數字組合驗證碼

img

1564563801717

1564563816361

1564563853298

1564563877047

動態gif中文泡泡驗證碼

動態gif字母數字組合驗證碼

表單示例

1565146764062

使用

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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM