寫在前面
說起來比較丟臉。我們有個手機的驗證碼傳送邏輯需要使用驗證碼,這塊本來專案裡面就有驗證碼繪製邏輯,.Net Framework的,使用的包是System.Drawing
,我把這驗證碼繪製邏輯複製到.Net Core的新專案引用對應包System.Drawing.Common
,windows下面驗證碼正常,CentOs下面死活不能正常,像這樣:
(左邊為CentOs執行結果,右為Windows)
- 依賴庫檢查安裝;
- 字型檢查安裝;
- 邏輯檢查;
折騰了一天多放棄了,決定重新寫。
我看了市面上的各種驗證碼,使用第三方的,免費的都有很多限制,並隨時有可能開始收費(使用者量上去後就收費,俗稱“養豬”);
有些比較大平臺的已經開始收費或者即將收費(無可厚非,不點名);
視野有限,沒有都一一瞭解到,如果有免費的,限制又比較少的,使用體驗不錯的第三方驗證碼,歡迎留言~~
綜上,我決定自己繪製
選擇圖片繪製庫
GitHub上面我看到比較多星的是:
綜合考慮後選擇了:ImageSharp
官方文件:https://sixlabors.github.io/docs/
成果
Hei.Captcha
一個.net core,跨平臺的驗證碼生成工具包,基於ImageSharp。
中文泡泡驗證碼
字母數字組合驗證碼
表單Demo
使用
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