using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Business.Util { public class LotteryUtils { /// /// 计算跨度; /// count:从左至右依次取号码个数; /// /// 号码数组 /// 从左至右依次取号码个数 /// public static int GetSpan(IList OpenCode, int count = 0) { List list = new List(OpenCode); int n = 0 >= count ? list.Count : count; n = n > list.Count ? list.Count - 1 : n - 1; for (int i = list.Count - 1; i > n; i--) { list.RemoveAt(i); } list.Sort(); return Math.Abs(list[0] - list[list.Count - 1]); } /// /// 计算和值; /// count:从左至右依次取号码个数; /// /// 号码数组 /// 从左至右依次取号码个数 /// public static int GetSum(IList OpenCode, int count = 0) { List list = new List(OpenCode); int n = 0 >= count ? list.Count : count; n = n > list.Count ? list.Count - 1 : n - 1; for (int i = list.Count - 1; i > n; i--) { list.RemoveAt(i); } int sum = 0; foreach (int item in list) { sum = sum + item; } return sum; } /// /// 计算大小比例; /// 大于等于splitNumber算大数; /// count:从左至右依次取号码个数; /// /// 号码数组 /// 分隔数字 /// 从左至右依次取号码个数 /// public static string GetProportionOfDX(IList OpenCode, int splitNumber, int count = 0) { List list = new List(OpenCode); int n = 0 >= count ? list.Count : count; n = n > list.Count ? list.Count - 1 : n - 1; for (int i = list.Count - 1; i > n; i--) { list.RemoveAt(i); } int a = 0, b = 0; foreach (int item in list) { if (item >= splitNumber) { a++; } else { b++; } } return a.ToString() + ":" + b.ToString(); } /// /// 计算奇偶比例; /// count:从左至右依次取号码个数; /// /// 号码数组 /// 从左至右依次取号码个数 /// public static string GetProportionOfJO(IList OpenCode, int count = 0) { List list = new List(OpenCode); int n = 0 >= count ? list.Count : count; n = n > list.Count ? list.Count - 1 : n - 1; for (int i = list.Count - 1; i > n; i--) { list.RemoveAt(i); } int a = 0, b = 0; foreach (int item in list) { if (1 == item % 2) { a++; } else { b++; } } return a.ToString() + ":" + b.ToString(); } /// /// 计算012比例 /// /// 号码数组 /// public static string GetProportionOf012(IList OpenCode) { int[] t = { 0, 0, 0 }; if (OpenCode[0]<0) { return t[0].ToString() + ":" + t[1].ToString() + ":" + t[2].ToString(); } foreach (var item in OpenCode) { t[item % 3]++; } return t[0].ToString() + ":" + t[1].ToString() + ":" + t[2].ToString(); } /// /// 计算质合比例 /// /// /// public static string GetProportionOfZh(IList OpenCode) { int[] t = { 0, 0 }; foreach (var item in OpenCode) { if (IsPrimeNumbers(item)) t[0]++; else t[1]++; } return t[0].ToString() + ":" + t[1].ToString(); } /// /// 判断是否为质数 /// /// /// public static bool IsPrimeNumbers(int number) { if (0 == number) return false; int iii = number / 2; for (int ii = 2; ii <= iii; ii++) { if (0 == number % ii) { return false; } } return true; } /// /// 福彩3D判断大小 /// /// /// public static bool IsDxNumbers(int item) { if (item > 4) { return true; } else { return false; } } /// /// 计算三区比(适用于双色球) /// /// /// public static string SsqSanQu(IList kjh) { int sanqu = 0, sanqu1 = 0, sanqu2 = 0; foreach (int item in kjh) { if (item >= 1 && item <= 11) { sanqu++; } if (item >= 12 && item <= 22) { sanqu1++; } if (item >= 23 && item <= 33) { sanqu2++; } } return string.Format("{0}:{1}:{2}", sanqu, sanqu1, sanqu2); } /// /// 计算ac值 /// /// 需计算的开奖号码 /// public static int GetAC(string[] kjh) { List result = GetCombination(kjh, 2); ArrayList acarray = new ArrayList(); int tpac = 0; for (int i = 0; i < result.Count; i++) { string[] tp = result[i].Split(','); int tmp = Math.Abs(Convert.ToInt32(tp[0]) - Convert.ToInt32(tp[1])); if (!acarray.Contains(tmp)) { tpac++; acarray.Add(tmp); } } return tpac - (kjh.Length - 1); } public static List GetCombination(string[] data, int count) { Dictionary dic = new Dictionary(); List output = new List(); for (int i = 0; i < data.Length; i++) { dic.Add(data[i], i); } SelectN(dic, data, count, 1, ref output); return output; } private static void SelectN(Dictionary dd, string[] data, int count, int times, ref List output) { Dictionary dic = new Dictionary(); foreach (KeyValuePair kv in dd) { for (int i = kv.Value + 1; i < data.Length; i++) { if (times < count - 1) { dic.Add(kv.Key + "," + data[i], i); } else { output.Add(kv.Key + "," + data[i]); } } } times++; if (dic.Count > 0) { SelectN(dic, data, count, times, ref output); } } /// /// 判断奇偶 /// /// /// public static bool IsJoNumbers(int item) { if (item % 2 == 0) { return false; } else { return true; } } /// /// 根据开奖号获取奇偶形态 /// /// /// public static string GetJOString(IList list) { StringBuilder sb = new StringBuilder(list.Count * 2); foreach (var item in list) { if (item % 2 == 0) { sb.Append("偶"); } else { sb.Append("奇"); } } return sb.ToString(); } /// /// 根据开奖号获取大小形态 /// /// /// public static string GetDXString(IList list, int splitNumber) { StringBuilder sb = new StringBuilder(list.Count * 2); foreach (var item in list) { if (item >= splitNumber) { sb.Append("大"); } else { sb.Append("小"); } } return sb.ToString(); } /// /// 根据开奖号获取质合形态 /// /// /// public static string GetZHString(IList list) { StringBuilder sb = new StringBuilder(list.Count * 2); bool zh; foreach (var item in list) { zh = true; if (item == 0) { sb.Append("合"); continue; } for (int i = 2; i < item; i++) { if (item % i == 0) { sb.Append("合"); zh = false; break; } } if (zh) { sb.Append("质"); } } return sb.ToString(); } /// /// 根据开奖号获取012形态 /// /// /// public static string Get012String(IList list) { StringBuilder sb = new StringBuilder(list.Count * 2); foreach (var item in list) { sb.Append((item % 3).ToString()); } return sb.ToString(); } /// /// 根据开奖号获取和尾值形态 /// /// /// public static string GetHWString(IList list) { string sum = GetSum(list).ToString(); return sum[sum.Length - 1].ToString(); } /// /// 模拟开奖号期数下拉列表 /// /// /// /// /// 格式化期数 /// public static string GetLotteryDDLQi(int topSize, long latestQi, string lottery, string formartUrl) { StringBuilder sp = new StringBuilder(512); int minQi = 0, y = 0, j = 1, endQi = 0, line = 1, _qi = 0; int year = (int)latestQi / 1000; int startQi = year * 1000 + 1; switch (lottery) { case "qlc": minQi = 2002001; break; case "3d": minQi = 2002001; break; case "ssq": minQi = 2003001; break; case "dlt": minQi = 2007001; break; case "p3": minQi = 2004001; break; case "p5": minQi = 2004001; break; case "qxc": minQi = 2006001; break; case "3dshijihao": minQi = 2002001; break; case "p3shijihao": minQi = 2004001; break; case "hc1": minQi = 2002001; break; case "df6j1": minQi = 2016059; break; case "hd15x5": minQi = 2016138; break; case "hn22x5": minQi = 2016138; break; case "ny36x7": minQi = 2016138; break; case "hb22X5": minQi = 16138; break; case "hb30x5": minQi = 16001; break; case "xj35x7": minQi = 2016040; break; case "js7ws": minQi = 16079; break; case "zj6j1": minQi = 16060; break; case "fj31x7": minQi = 16082; break; case "fj36x7": minQi = 16059; break; } while (line <= topSize) { _qi = (int)latestQi - j; if (_qi < minQi) break; if (_qi < startQi) { y = y + 1; startQi = (year - y) * 1000 + 1; endQi = (year - y) * 1000 + 153; if (lottery == "3d" || lottery == "p3" || lottery == "p5" || lottery == "3dshijihao" || lottery == "p3shijihao" || lottery == "hc1" || lottery == "df6j1" || lottery == "hd15x5" || lottery == "hn22x5" || lottery == "ny36x7" || lottery == "xj35x7") { endQi = (year - y) * 1000 + 358; if (2014 == (year - y)) endQi = 2014357; } if (0 == ((year - y) % 4)) { endQi = endQi + 1; } latestQi = endQi; _qi = endQi; j = 0; } sp.AppendFormat("
  • {1}
  • ", string.Format(formartUrl + _qi), _qi); j++; line++; } return sp.ToString(); } /// /// 模拟开奖号期数下拉列表2 /// /// /// /// /// public static List GetLotteryDDLQi2(int topSize, long latestQi, string lottery) { var objCodeList = new List(); dynamic objsCode = new System.Dynamic.ExpandoObject(); //var objNumberList = new List(); //var objsNumber = new ExpandoObject(); StringBuilder sp = new StringBuilder(512); int minQi = 0, y = 0, j = 1, endQi = 0, line = 1, _qi = 0; int year = (int)latestQi / 1000; int startQi = year * 1000 + 1; switch (lottery) { case "qlc": minQi = 2002001; break; case "3d": minQi = 2002001; break; case "ssq": minQi = 2003001; break; case "dlt": minQi = 2007001; break; case "p3": minQi = 2004001; break; case "p5": minQi = 2004001; break; case "qxc": minQi = 2006001; break; case "3dshijihao": minQi = 2002001; break; case "p3shijihao": minQi = 2004001; break; case "hc1": minQi = 2002001; break; case "df6j1": minQi = 2016059; break; case "hd15x5": minQi = 2016138; break; case "hn22x5": minQi = 2016138; break; case "ny36x7": minQi = 2016138; break; case "hb22X5": minQi = 16138; break; case "hb30x5": minQi = 16001; break; case "xj35x7": minQi = 2016040; break; case "js7ws": minQi = 16079; break; case "zj6j1": minQi = 16060; break; case "fj31x7": minQi = 16082; break; case "fj36x7": minQi = 16059; break; } while (line <= topSize) { _qi = (int)latestQi - j; if (_qi < minQi) break; if (_qi < startQi) { y = y + 1; startQi = (year - y) * 1000 + 1; endQi = (year - y) * 1000 + 153; if (lottery == "3d" || lottery == "p3" || lottery == "p5" || lottery == "3dshijihao" || lottery == "p3shijihao" || lottery == "hc1" || lottery == "df6j1" || lottery == "hd15x5" || lottery == "hn22x5" || lottery == "ny36x7" || lottery == "xj35x7") { endQi = (year - y) * 1000 + 358; if (2014 == (year - y)) endQi = 2014357; } if (0 == ((year - y) % 4)) { endQi = endQi + 1; } latestQi = endQi; _qi = endQi; j = 0; } objsCode.value = _qi; objCodeList.Add(objsCode); objsCode = new System.Dynamic.ExpandoObject(); j++; line++; } return objCodeList; } /// /// 手机端开奖结果下拉 /// /// /// /// public static string GetLotteryDDLQi(int topSize, long latestQi, string lottery) { StringBuilder sp = new StringBuilder(512); int minQi = 0, y = 0, j = 1, endQi = 0, line = 1, _qi = 0; int year = (int)latestQi / 1000; int startQi = year * 1000 + 1; switch (lottery) { case "qlc": minQi = 2002001; break; case "3d": minQi = 2002001; break; case "ssq": minQi = 2003001; break; case "dlt": minQi = 2007001; break; case "p3": minQi = 2004001; break; case "p5": minQi = 2004001; break; case "qxc": minQi = 2006001; break; case "3dshijihao": minQi = 2002001; break; case "p3shijihao": minQi = 2004001; break; case "hc1": minQi = 2002001; break; case "df6j1": minQi = 2016059; break; case "hd15x5": minQi = 2016138; break; case "hn22x5": minQi = 2016138; break; case "ny36x7": minQi = 2016138; break; case "hb22X5": minQi = 16138; break; case "hb30x5": minQi = 16001; break; case "xj35x7": minQi = 2016040; break; case "js7ws": minQi = 16079; break; case "zj6j1": minQi = 16060; break; case "fj31x7": minQi = 16082; break; case "fj36x7": minQi = 16059; break; } while (line <= topSize) { _qi = (int)latestQi - j; if (_qi < minQi) break; if (_qi < startQi) { y = y + 1; startQi = (year - y) * 1000 + 1; endQi = (year - y) * 1000 + 153; if (lottery == "3d" || lottery == "p3" || lottery == "p5" || lottery == "3dshijihao" || lottery == "p3shijihao" || lottery == "hc1" || lottery == "df6j1" || lottery == "hd15x5" || lottery == "hn22x5" || lottery == "ny36x7" || lottery == "xj35x7") { endQi = (year - y) * 1000 + 358; if (2014 == (year - y)) endQi = 2014357; } if (0 == ((year - y) % 4)) { endQi = endQi + 1; } latestQi = endQi; _qi = endQi; j = 0; } //todo:临时增加需要补位的彩种缩写 if (lottery == "zj6j1" || lottery == "js7ws" || lottery == "hb22x5" || lottery == "hb30x5" || lottery == "fj31x7" || lottery == "fj36x7") { _qi = 2000000 + _qi; } sp.AppendFormat("", _qi); j++; line++; } return sp.ToString(); } /// /// 模拟开奖号、试机号、开机号期数下拉列表 /// /// /// /// /// /// /// public static string GetLotteryDDLQi(int topSize, long latestQi, string lottery, string formatHTML, string formatUrl) { var sp = new StringBuilder(topSize * (formatHTML.Length + formatUrl.Length + 10)); int minQi = 0, y = 0, j = 0, endQi = 0, line = 1, _qi = 0; int year = (int)latestQi / 1000; int startQi = year * 1000 + 1; switch (lottery) { case "qlc": minQi = 2002001; break; case "3d": minQi = 2002001; break; case "ssq": minQi = 2003001; break; case "dlt": minQi = 2007001; break; case "p3": minQi = 2004001; break; case "p5": minQi = 2004001; break; case "qxc": minQi = 2006001; break; case "3dshijihao": minQi = 2002001; break; case "p3shijihao": minQi = 2004001; break; case "hc1": minQi = 2002001; break; } while (line <= topSize) { _qi = (int)latestQi - j; if (_qi < minQi) break; if (_qi < startQi) { y = y + 1; startQi = (year - y) * 1000 + 1; endQi = (year - y) * 1000 + 153; if (lottery == "3d" || lottery == "p3" || lottery == "p5" || lottery == "3dshijihao" || lottery == "p3shijihao" || lottery == "hc1") { endQi = (year - y) * 1000 + 358; if (2014 == (year - y)) endQi = 2014357; } if (0 == ((year - y) % 4)) { endQi = endQi + 1; } latestQi = endQi; _qi = endQi; j = 0; } sp.AppendFormat(formatHTML, string.Format(formatUrl, _qi), _qi); j++; line++; } return sp.ToString(); } /// /// 福建31选7三区比 /// /// /// public static string Fj31x7SanQu(IList list) { int sanqu = 0, sanqu1 = 0, sanqu2 = 0; foreach (int item in list) { if (item >= 1 && item <= 10) { sanqu++; } if (item >= 11 && item <= 20) { sanqu1++; } if (item >= 21 && item <= 31) { sanqu2++; } } return string.Format("{0}:{1}:{2}", sanqu, sanqu1, sanqu2); } /// /// 福建31选7三区比 /// /// /// public static string Fj36x7SanQu(IList list) { int sanqu = 0, sanqu1 = 0, sanqu2 = 0; foreach (int item in list) { if (item >= 1 && item <= 12) { sanqu++; } if (item >= 13 && item <= 24) { sanqu1++; } if (item >= 25 && item <= 36) { sanqu2++; } } return string.Format("{0}:{1}:{2}", sanqu, sanqu1, sanqu2); } /// /// 华东15选5三区比 /// /// /// public static string Hd15x5SanQu(IList list) { int sanqu = 0, sanqu1 = 0, sanqu2 = 0; foreach (int item in list) { if (item >= 1 && item <= 5) { sanqu++; } if (item >= 6 && item <= 10) { sanqu1++; } if (item >= 11 && item <= 15) { sanqu2++; } } return string.Format("{0}:{1}:{2}", sanqu, sanqu1, sanqu2); } /// /// 南粤36选7三区比 /// /// /// public static string Ny36x7SanQu(IList list) { int sanqu = 0, sanqu1 = 0, sanqu2 = 0; foreach (int item in list) { if (item >= 1 && item <= 12) { sanqu++; } if (item >= 13 && item <= 24) { sanqu1++; } if (item >= 25 && item <= 36) { sanqu2++; } } return string.Format("{0}:{1}:{2}", sanqu, sanqu1, sanqu2); } /// /// 获取中奖数字 /// /// 开奖号 /// 对比号 /// public static int[] GetTheSameOpenCodes(int[] arr1, int[] arr2) { Array.Sort(arr1); Array.Sort(arr2); var list = new List(); for (int indexA = 0, lenA = arr1.Length, indexB = 0, lenB = arr2.Length; indexA < lenA && indexB < lenB;) { if (arr1[indexA] == arr2[indexB]) { list.Add(arr1[indexA]); System.Diagnostics.Debug.WriteLine(arr1[indexA] + " , "); indexA++; indexB++; } else if (arr1[indexA] < arr2[indexB]) { indexA++; } else { indexB++; } } return list.ToArray(); } /// /// 获取命中数 /// /// public static int GetTheHitRate(int[] arr1, params int[] arr2) { var n = GetTheSameOpenCodes(arr1, arr2).Length; return n; } } }