Пример #1
0
        /// <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));
        }
Пример #2
0
        /// <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());
        }