寫在前面
說起來比較丟臉。我們有個手機的驗證碼發送邏輯需要使用驗證碼,這塊本來項目里面就有驗證碼繪制邏輯,.Net Framework的,使用的包是System.Drawing
,我把這驗證碼繪制邏輯復制到.Net Core的新項目引用對比包System.Drawing.Common
,windows下面驗證碼正常,CentOs下面死活不能正常,像這樣:
(左邊為CentOs運行結果,右為Windows)
- 依賴庫檢查安裝;
- 字體檢查安裝;
- 邏輯檢查;
折騰了一天多放棄了,決定重新寫。
我看了市面上的各種驗證碼,使用第三方的,免費的都有很多限制,並隨時有可能開始收費(用戶量上去后就收費,俗稱“養豬”);
有些比較大平台的已經開始收費或者即將收費(無可厚非,不點名);
視野有限,沒有都一一了解到,如果有免費的,限制又比較少的,使用體驗不錯的第三方驗證碼,歡迎留言~~
綜上,我決定自己繪制
選擇圖片繪制庫
GitHub上面我看到比較多星的是:
綜合考慮后選擇了: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