/// <summary> /// 测试识别率。 /// </summary> /// <param name="verificationCodeCategory">验证码类别。</param> /// <param name="count">数量。</param> /// <param name="action">回调函数。</param> /// <returns>结果。成功数+总数。</returns> public Tuple <int, int> Test(VerificationCodeCategory verificationCodeCategory, int count, Action <string> action) { var successCount = 0; if (count > 0) { using (var ocrApi = OcrApi.Create()) { ocrApi.Init(Languages.English); for (int i = 0; i < count; i++) { var numberChar = Utils.GetRandString(verificationCodeCategory); using (var bitmap = Utils.CreateCaptchaSimpleImage(numberChar)) { var text = ocrApi.GetTextFromImage(bitmap); var resultSuccess = string.Equals(numberChar?.Trim(), text?.Trim(), StringComparison.CurrentCultureIgnoreCase); var resultMessage = resultSuccess ? "识别成功" : "识别失败"; if (resultSuccess) { successCount++; } var message = $"{i + 1}, 随机数是{numberChar},验证码识别是{text},结果:{resultMessage}。 \r\n"; action?.Invoke(message); bitmap.Dispose(); } } } } return(new Tuple <int, int>(successCount, count)); }
/// <summary> /// 生成随机数。 /// </summary> /// <param name="verificationCodeCategory"></param> /// <param name="length"></param> /// <returns>随机数。</returns> public static string GetRandString(VerificationCodeCategory verificationCodeCategory, int length = 4) { StringBuilder sb = new StringBuilder(); var numString = "0123456789"; var lowerString = "abcdefghijklmnopqrstuvwxyz"; var upperString = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var baseStr = string.Empty; if (verificationCodeCategory.HasFlag(VerificationCodeCategory.Number)) { baseStr += numString; } if (verificationCodeCategory.HasFlag(VerificationCodeCategory.Lowercase)) { baseStr += lowerString; } if (verificationCodeCategory.HasFlag(VerificationCodeCategory.Uppercase)) { baseStr += upperString; } var baseArray = baseStr.ToCharArray(); for (int i = 0; i < length; i++) { var ch = baseArray.ElementAt(Random.Next(baseArray.Length)); sb.Append(ch); } return(sb.ToString()); }