Esempio n. 1
0
        /// <summary>
        /// 检查投注号码格式是否正确
        /// </summary>
        /// <param name="antecode">投注号码</param>
        /// <param name="errMsg">错误消息</param>
        /// <returns>格式是否正确</returns>
        public bool CheckAntecode(string antecode, out string errMsg)
        {
            // 前置验证 - 彩种、玩法、投注号码
            PreconditionAssert.IsNotEmptyString(GameCode, "检查投注号码格式前,必须设置彩种");
            PreconditionAssert.IsNotEmptyString(GameType, "检查投注号码格式前,必须设置玩法");
            PreconditionAssert.IsNotEmptyString(antecode, "必须传入非空的投注号码");

            var list = antecode.Split('|');

            if (list.Length > 1)
            {
                var dans = list[1].Split(new char[] { Spliter }, StringSplitOptions.RemoveEmptyEntries);
                DanNumbers = new int[dans.Length];
                for (int i = 0; i < dans.Length; i++)
                {
                    DanNumbers[i] = int.Parse(dans[i]);
                }
                if (DanNumbers.GroupBy(i => i).Count() != DanNumbers.Length)
                {
                    errMsg = "胆码重复";
                    return(false);
                }
            }
            else
            {
                DanNumbers = new int[0];
            }
            AnteCodeNumbers = list[0].Split(Spliter);
            if (AnteCodeNumbers.Length != TotalNumber)
            {
                errMsg = string.Format("投注号码必须是被\"{0}\"切分成 {1}个部分的字符串", Spliter, TotalNumber);
                return(false);
            }
            var orderAnalyzer = AnalyzerFactory.GetOrderAnalyzer(GameCode, GameType);
            var tmp           = AnteCodeNumbers.Clone() as string[];

            if (IsEnableWildcard)
            {
                tmp = AnteCodeNumbers.Where(a =>
                {
                    return(!a.Equals(Wildcard.ToString()));
                }).ToArray();
                if (tmp.Length < BallNumber || tmp.Length > TotalNumber)
                {
                    errMsg = string.Format("有效投注号码必须是\"{0} - {1}\"个号码", BallNumber, TotalNumber);
                    return(false);
                }
            }
            if (tmp.Length == BallNumber && DanNumbers.Length > 0)
            {
                errMsg = "胆码设置错误 - " + antecode;
                return(false);
            }
            if (DanNumbers.Length >= BallNumber)
            {
                errMsg = "胆码设置错误,胆码必须小于 " + BallNumber + "个 - " + antecode;
                return(false);
            }
            foreach (var danIndex in DanNumbers)
            {
                var dan = AnteCodeNumbers[danIndex];
                if (dan == Wildcard.ToString())
                {
                    errMsg = "胆码设置错误,对应胆码为通配符 - " + antecode;
                    return(false);
                }
            }
            foreach (var item in tmp)
            {
                if (!orderAnalyzer.CheckOneAntecodeNumber(item, out errMsg))
                {
                    return(false);
                }
            }
            errMsg = "";
            return(true);
        }