[Hei.Captcha] Asp.Net Core 跨平臺驗證碼實現

喬達摩發表於2019-08-01

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

一個.net core,跨平臺的驗證碼生成工具包,基於ImageSharp

中文泡泡驗證碼

img

1564563919705

1564563740706

字母數字組合驗證碼

img

1564563801717

1564563816361

1564563853298

1564563877047

表單Demo

1564564569409

使用

Install-Package Hei.Captcha
/// <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");
}

高階

參照Demo, 通過修改/豐富應用程式執行目錄./fonts目錄下的字型檔案,生成更多不同字型組合的驗證碼。

總結

滑塊驗證碼、點選選擇驗證碼、軌跡驗證碼等的實現時間成本,技術要求都比較高,並且各種防破解上面可能也需要花很多時間。綜合需求考慮選擇了個價效比比較高的“土味”驗證碼繪製方案;

本驗證碼我自己也沒有去嘗試去破解過,不知道破解難度,有興趣的同學試試,能告訴我結果就最好了[比心]

驗證碼肉眼辨認上面,可能稍難體驗差了點。自己修改下泡泡的數量,繪製的引數改改,程式碼不多,都有備註。

希望能幫到大家,也希望大家積極PR,豐富驗證碼樣式。

原始碼

喜歡留個星~

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

參考

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

相關文章