这里只介绍最简单的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 其他验证码
其他方式的验证码,需要对图片进行处理。涉及到比较复杂的处理流程和原理。