這裏只介紹最簡單的4位數字不太複雜的驗證碼。
1. 生成驗證碼圖片。(隨機數直接使用數字。 new Random().Next(10) 。 )
生成圖片的代碼
/// <summary> /// 獲取含驗證碼字符串的圖片。 /// </summary> /// <param name="validateCode">驗證碼字符串。</param> /// <returns>圖片對象。</returns> public static Image CreateCaptchaSimpleImage(string validateCode) { Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 16.0), 27); using (Graphics g = Graphics.FromImage(image)) { var font = new Font(FontFamily.GenericMonospace, 13); var brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true); g.DrawString(validateCode, font, brush, 3, 2); return image; } }
2. 識別部分,
使用nuget安裝 使用Tesseract +data 或者直接使用 Tesseract.Net.SDK
調用方法識別驗證碼
/// <summary> /// 識別字符串。 /// </summary> /// <param name="bitmap">bitmap圖片。</param> /// <returns>識別結果。</returns> public string GetStringFromImage(Bitmap bitmap) { using (var ocrApi = OcrApi.Create()) { ocrApi.Init(Languages.English); return ocrApi.GetTextFromImage(bitmap); } }
3. 測試識別率。
可以看到 數字識別率是最高的。 字母識別率比較低。
4 其他驗證碼
其他方式的驗證碼,需要對圖片進行處理。涉及到比較複雜的處理流程和原理。