LotteryUtils.cs 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace Cache.Util
  8. {
  9. public class LotteryUtils
  10. {
  11. /// <summary>
  12. /// 计算跨度;
  13. /// count:从左至右依次取号码个数;
  14. /// </summary>
  15. /// <param name="OpenCode">号码数组</param>
  16. /// <param name="count">从左至右依次取号码个数</param>
  17. /// <returns></returns>
  18. public static int GetSpan(IList<int> OpenCode, int count = 0)
  19. {
  20. List<int> list = new List<int>(OpenCode);
  21. int n = 0 >= count ? list.Count : count;
  22. n = n > list.Count ? list.Count - 1 : n - 1;
  23. for (int i = list.Count - 1; i > n; i--)
  24. { list.RemoveAt(i); }
  25. list.Sort();
  26. return Math.Abs(list[0] - list[list.Count - 1]);
  27. }
  28. /// <summary>
  29. /// 计算和值;
  30. /// count:从左至右依次取号码个数;
  31. /// </summary>
  32. /// <param name="OpenCode">号码数组</param>
  33. /// <param name="count">从左至右依次取号码个数</param>
  34. /// <returns></returns>
  35. public static int GetSum(IList<int> OpenCode, int count = 0)
  36. {
  37. List<int> list = new List<int>(OpenCode);
  38. int n = 0 >= count ? list.Count : count;
  39. n = n > list.Count ? list.Count - 1 : n - 1;
  40. for (int i = list.Count - 1; i > n; i--)
  41. { list.RemoveAt(i); }
  42. int sum = 0;
  43. foreach (int item in list)
  44. { sum = sum + item; }
  45. return sum;
  46. }
  47. /// <summary>
  48. /// 计算大小比例;
  49. /// 大于等于splitNumber算大数;
  50. /// count:从左至右依次取号码个数;
  51. /// </summary>
  52. /// <param name="OpenCode">号码数组</param>
  53. /// <param name="splitNumber">分隔数字</param>
  54. /// <param name="count">从左至右依次取号码个数</param>
  55. /// <returns></returns>
  56. public static string GetProportionOfDX(IList<int> OpenCode, int splitNumber, int count = 0)
  57. {
  58. List<int> list = new List<int>(OpenCode);
  59. int n = 0 >= count ? list.Count : count;
  60. n = n > list.Count ? list.Count - 1 : n - 1;
  61. for (int i = list.Count - 1; i > n; i--)
  62. { list.RemoveAt(i); }
  63. int a = 0, b = 0;
  64. foreach (int item in list)
  65. {
  66. if (item >= splitNumber)
  67. { a++; }
  68. else { b++; }
  69. }
  70. return a.ToString() + ":" + b.ToString();
  71. }
  72. /// <summary>
  73. /// 计算奇偶比例;
  74. /// count:从左至右依次取号码个数;
  75. /// </summary>
  76. /// <param name="OpenCode">号码数组</param>
  77. /// <param name="count">从左至右依次取号码个数</param>
  78. /// <returns></returns>
  79. public static string GetProportionOfJO(IList<int> OpenCode, int count = 0)
  80. {
  81. List<int> list = new List<int>(OpenCode);
  82. int n = 0 >= count ? list.Count : count;
  83. n = n > list.Count ? list.Count - 1 : n - 1;
  84. for (int i = list.Count - 1; i > n; i--)
  85. { list.RemoveAt(i); }
  86. int a = 0, b = 0;
  87. foreach (int item in list)
  88. {
  89. if (1 == item % 2)
  90. { a++; }
  91. else { b++; }
  92. }
  93. return a.ToString() + ":" + b.ToString();
  94. }
  95. /// <summary>
  96. /// 计算012比例
  97. /// </summary>
  98. /// <param name="OpenCode">号码数组</param>
  99. /// <returns></returns>
  100. public static string GetProportionOf012(IList<int> OpenCode)
  101. {
  102. int[] t = { 0, 0, 0 };
  103. foreach (var item in OpenCode)
  104. {
  105. t[item % 3]++;
  106. }
  107. return t[0].ToString() + ":" + t[1].ToString() + ":" + t[2].ToString();
  108. }
  109. /// <summary>
  110. /// 计算质合比例
  111. /// </summary>
  112. /// <param name="OpenCode"></param>
  113. /// <returns></returns>
  114. public static string GetProportionOfZh(IList<int> OpenCode)
  115. {
  116. int[] t = { 0, 0 };
  117. foreach (var item in OpenCode)
  118. {
  119. if (IsPrimeNumbers(item))
  120. t[0]++;
  121. else
  122. t[1]++;
  123. }
  124. return t[0].ToString() + ":" + t[1].ToString();
  125. }
  126. /// <summary>
  127. /// 判断是否为质数
  128. /// </summary>
  129. /// <param name="number"></param>
  130. /// <returns></returns>
  131. public static bool IsPrimeNumbers(int number)
  132. {
  133. if (0 == number)
  134. return false;
  135. int iii = number / 2;
  136. for (int ii = 2; ii <= iii; ii++)
  137. {
  138. if (0 == number % ii)
  139. {
  140. return false;
  141. }
  142. }
  143. return true;
  144. }
  145. /// <summary>
  146. /// 福彩3D判断大小
  147. /// </summary>
  148. /// <param name="item"></param>
  149. /// <returns></returns>
  150. public static bool IsDxNumbers(int item)
  151. {
  152. if (item > 4)
  153. {
  154. return true;
  155. }
  156. else
  157. {
  158. return false;
  159. }
  160. }
  161. /// <summary>
  162. /// 计算三区比(适用于双色球)
  163. /// </summary>
  164. /// <param name="item"></param>
  165. /// <returns></returns>
  166. public static string SsqSanQu(IList<int> kjh)
  167. {
  168. int sanqu = 0, sanqu1 = 0, sanqu2 = 0;
  169. foreach (int item in kjh)
  170. {
  171. if (item >= 1 && item <= 11)
  172. {
  173. sanqu++;
  174. }
  175. if (item >= 12 && item <= 22)
  176. {
  177. sanqu1++;
  178. }
  179. if (item >= 23 && item <= 33)
  180. {
  181. sanqu2++;
  182. }
  183. }
  184. return string.Format("{0}:{1}:{2}", sanqu, sanqu1, sanqu2);
  185. }
  186. /// <summary>
  187. /// 计算ac值
  188. /// </summary>
  189. /// <param name="kjh">需计算的开奖号码</param>
  190. /// <returns></returns>
  191. public static int GetAC(string[] kjh)
  192. {
  193. List<string> result = GetCombination(kjh, 2);
  194. ArrayList acarray = new ArrayList();
  195. int tpac = 0;
  196. for (int i = 0; i < result.Count; i++)
  197. {
  198. string[] tp = result[i].Split(',');
  199. int tmp = Math.Abs(Convert.ToInt32(tp[0]) - Convert.ToInt32(tp[1]));
  200. if (!acarray.Contains(tmp))
  201. {
  202. tpac++;
  203. acarray.Add(tmp);
  204. }
  205. }
  206. return tpac - (kjh.Length - 1);
  207. }
  208. public static List<string> GetCombination(string[] data, int count)
  209. {
  210. Dictionary<string, int> dic = new Dictionary<string, int>();
  211. List<string> output = new List<string>();
  212. for (int i = 0; i < data.Length; i++)
  213. {
  214. dic.Add(data[i], i);
  215. }
  216. SelectN(dic, data, count, 1, ref output);
  217. return output;
  218. }
  219. private static void SelectN(Dictionary<string, int> dd, string[] data, int count, int times, ref List<string> output)
  220. {
  221. Dictionary<string, int> dic = new Dictionary<string, int>();
  222. foreach (KeyValuePair<string, int> kv in dd)
  223. {
  224. for (int i = kv.Value + 1; i < data.Length; i++)
  225. {
  226. if (times < count - 1)
  227. {
  228. dic.Add(kv.Key + "," + data[i], i);
  229. }
  230. else
  231. {
  232. output.Add(kv.Key + "," + data[i]);
  233. }
  234. }
  235. }
  236. times++;
  237. if (dic.Count > 0)
  238. {
  239. SelectN(dic, data, count, times, ref output);
  240. }
  241. }
  242. /// <summary>
  243. /// 判断奇偶
  244. /// </summary>
  245. /// <param name="item"></param>
  246. /// <returns></returns>
  247. public static bool IsJoNumbers(int item)
  248. {
  249. if (item % 2 == 0)
  250. {
  251. return false;
  252. }
  253. else
  254. {
  255. return true;
  256. }
  257. }
  258. /// <summary>
  259. /// 根据开奖号获取奇偶形态
  260. /// </summary>
  261. /// <param name="list"></param>
  262. /// <returns></returns>
  263. public static string GetJOString(IList<int> list)
  264. {
  265. StringBuilder sb = new StringBuilder(list.Count * 2);
  266. foreach (var item in list)
  267. {
  268. if (item % 2 == 0)
  269. {
  270. sb.Append("偶");
  271. }
  272. else
  273. {
  274. sb.Append("奇");
  275. }
  276. }
  277. return sb.ToString();
  278. }
  279. /// <summary>
  280. /// 根据开奖号获取大小形态
  281. /// </summary>
  282. /// <param name="list"></param>
  283. /// <returns></returns>
  284. public static string GetDXString(IList<int> list, int splitNumber)
  285. {
  286. StringBuilder sb = new StringBuilder(list.Count * 2);
  287. foreach (var item in list)
  288. {
  289. if (item >= splitNumber)
  290. {
  291. sb.Append("大");
  292. }
  293. else
  294. {
  295. sb.Append("小");
  296. }
  297. }
  298. return sb.ToString();
  299. }
  300. /// <summary>
  301. /// 根据开奖号获取质合形态
  302. /// </summary>
  303. /// <param name="list"></param>
  304. /// <returns></returns>
  305. public static string GetZHString(IList<int> list)
  306. {
  307. StringBuilder sb = new StringBuilder(list.Count * 2);
  308. bool zh;
  309. foreach (var item in list)
  310. {
  311. zh = true;
  312. if (item == 0)
  313. {
  314. sb.Append("合");
  315. continue;
  316. }
  317. for (int i = 2; i < item; i++)
  318. {
  319. if (item % i == 0)
  320. {
  321. sb.Append("合");
  322. zh = false;
  323. break;
  324. }
  325. }
  326. if (zh)
  327. {
  328. sb.Append("质");
  329. }
  330. }
  331. return sb.ToString();
  332. }
  333. /// <summary>
  334. /// 根据开奖号获取012形态
  335. /// </summary>
  336. /// <param name="list"></param>
  337. /// <returns></returns>
  338. public static string Get012String(IList<int> list)
  339. {
  340. StringBuilder sb = new StringBuilder(list.Count * 2);
  341. foreach (var item in list)
  342. {
  343. sb.Append((item % 3).ToString());
  344. }
  345. return sb.ToString();
  346. }
  347. /// <summary>
  348. /// 根据开奖号获取和尾值形态
  349. /// </summary>
  350. /// <param name="list"></param>
  351. /// <returns></returns>
  352. public static string GetHWString(IList<int> list)
  353. {
  354. string sum = GetSum(list).ToString();
  355. return sum[sum.Length - 1].ToString();
  356. }
  357. /// <summary>
  358. /// 模拟开奖号期数下拉列表
  359. /// </summary>
  360. /// <param name="topSize"></param>
  361. /// <param name="latestQi"></param>
  362. /// <param name="lottery"></param>
  363. /// <param name="formartUrl">格式化期数</param>
  364. /// <returns></returns>
  365. public static string GetLotteryDDLQi(int topSize, long latestQi, string lottery, string formartUrl)
  366. {
  367. StringBuilder sp = new StringBuilder(512);
  368. int minQi = 0, y = 0, j = 1, endQi = 0, line = 1, _qi = 0;
  369. int year = (int)latestQi / 1000;
  370. int startQi = year * 1000 + 1;
  371. switch (lottery)
  372. {
  373. case "qlc":
  374. minQi = 2002001;
  375. break;
  376. case "3d":
  377. minQi = 2002001;
  378. break;
  379. case "ssq":
  380. minQi = 2003001;
  381. break;
  382. case "dlt":
  383. minQi = 2007001;
  384. break;
  385. case "p3":
  386. minQi = 2004001;
  387. break;
  388. case "p5":
  389. minQi = 2004001;
  390. break;
  391. case "qxc":
  392. minQi = 2006001;
  393. break;
  394. case "3dshijihao":
  395. minQi = 2002001;
  396. break;
  397. case "p3shijihao":
  398. minQi = 2004001;
  399. break;
  400. case "hc1":
  401. minQi = 2002001;
  402. break;
  403. case "df6j1":
  404. minQi = 2016059;
  405. break;
  406. case "hd15x5":
  407. minQi = 2016138;
  408. break;
  409. case "hn22x5":
  410. minQi = 2016138;
  411. break;
  412. case "ny36x7":
  413. minQi = 2016138;
  414. break;
  415. case "hb22X5":
  416. minQi = 16138;
  417. break;
  418. case "hb30x5":
  419. minQi = 16001;
  420. break;
  421. case "xj35x7":
  422. minQi = 2016040;
  423. break;
  424. case "js7ws":
  425. minQi = 16079;
  426. break;
  427. case "zj6j1":
  428. minQi = 16060;
  429. break;
  430. case "fj31x7":
  431. minQi = 16082;
  432. break;
  433. case "fj36x7":
  434. minQi = 16059;
  435. break;
  436. }
  437. while (line <= topSize)
  438. {
  439. _qi = (int)latestQi - j;
  440. if (_qi < minQi)
  441. break;
  442. if (_qi < startQi)
  443. {
  444. y = y + 1;
  445. startQi = (year - y) * 1000 + 1;
  446. endQi = (year - y) * 1000 + 153;
  447. if (lottery == "3d" || lottery == "p3" || lottery == "p5" || lottery == "3dshijihao" || lottery == "p3shijihao" || lottery == "hc1" || lottery == "df6j1" || lottery == "hd15x5" || lottery == "hn22x5" || lottery == "ny36x7" || lottery == "xj35x7")
  448. {
  449. endQi = (year - y) * 1000 + 358;
  450. if (2014 == (year - y))
  451. endQi = 2014357;
  452. }
  453. if (0 == ((year - y) % 4))
  454. {
  455. endQi = endQi + 1;
  456. }
  457. latestQi = endQi;
  458. _qi = endQi;
  459. j = 0;
  460. }
  461. sp.AppendFormat("<li><a href=\"{0}.htm\">{1}</a></li>", string.Format(formartUrl + _qi), _qi);
  462. j++;
  463. line++;
  464. }
  465. return sp.ToString();
  466. }
  467. /// <summary>
  468. /// 模拟开奖号期数下拉列表2
  469. /// </summary>
  470. /// <param name="topSize"></param>
  471. /// <param name="latestQi"></param>
  472. /// <param name="lottery"></param>
  473. /// <returns></returns>
  474. public static List<dynamic> GetLotteryDDLQi2(int topSize, long latestQi, string lottery)
  475. {
  476. var objCodeList = new List<dynamic>();
  477. dynamic objsCode = new System.Dynamic.ExpandoObject();
  478. //var objNumberList = new List<dynamic>();
  479. //var objsNumber = new ExpandoObject();
  480. StringBuilder sp = new StringBuilder(512);
  481. int minQi = 0, y = 0, j = 1, endQi = 0, line = 1, _qi = 0;
  482. int year = (int)latestQi / 1000;
  483. int startQi = year * 1000 + 1;
  484. switch (lottery)
  485. {
  486. case "qlc":
  487. minQi = 2002001;
  488. break;
  489. case "3d":
  490. minQi = 2002001;
  491. break;
  492. case "ssq":
  493. minQi = 2003001;
  494. break;
  495. case "dlt":
  496. minQi = 2007001;
  497. break;
  498. case "p3":
  499. minQi = 2004001;
  500. break;
  501. case "p5":
  502. minQi = 2004001;
  503. break;
  504. case "qxc":
  505. minQi = 2006001;
  506. break;
  507. case "3dshijihao":
  508. minQi = 2002001;
  509. break;
  510. case "p3shijihao":
  511. minQi = 2004001;
  512. break;
  513. case "hc1":
  514. minQi = 2002001;
  515. break;
  516. case "df6j1":
  517. minQi = 2016059;
  518. break;
  519. case "hd15x5":
  520. minQi = 2016138;
  521. break;
  522. case "hn22x5":
  523. minQi = 2016138;
  524. break;
  525. case "ny36x7":
  526. minQi = 2016138;
  527. break;
  528. case "hb22X5":
  529. minQi = 16138;
  530. break;
  531. case "hb30x5":
  532. minQi = 16001;
  533. break;
  534. case "xj35x7":
  535. minQi = 2016040;
  536. break;
  537. case "js7ws":
  538. minQi = 16079;
  539. break;
  540. case "zj6j1":
  541. minQi = 16060;
  542. break;
  543. case "fj31x7":
  544. minQi = 16082;
  545. break;
  546. case "fj36x7":
  547. minQi = 16059;
  548. break;
  549. }
  550. while (line <= topSize)
  551. {
  552. _qi = (int)latestQi - j;
  553. if (_qi < minQi)
  554. break;
  555. if (_qi < startQi)
  556. {
  557. y = y + 1;
  558. startQi = (year - y) * 1000 + 1;
  559. endQi = (year - y) * 1000 + 153;
  560. if (lottery == "3d" || lottery == "p3" || lottery == "p5" || lottery == "3dshijihao" || lottery == "p3shijihao" || lottery == "hc1" || lottery == "df6j1" || lottery == "hd15x5" || lottery == "hn22x5" || lottery == "ny36x7" || lottery == "xj35x7")
  561. {
  562. endQi = (year - y) * 1000 + 358;
  563. if (2014 == (year - y))
  564. endQi = 2014357;
  565. }
  566. if (0 == ((year - y) % 4))
  567. {
  568. endQi = endQi + 1;
  569. }
  570. latestQi = endQi;
  571. _qi = endQi;
  572. j = 0;
  573. }
  574. objsCode.value = _qi;
  575. objCodeList.Add(objsCode);
  576. objsCode = new System.Dynamic.ExpandoObject();
  577. j++;
  578. line++;
  579. }
  580. return objCodeList;
  581. }
  582. /// <summary>
  583. /// 手机端开奖结果下拉
  584. /// </summary>
  585. /// <param name="topSize"></param>
  586. /// <param name="latestQi"></param>
  587. /// <returns></returns>
  588. public static string GetLotteryDDLQi(int topSize, long latestQi, string lottery)
  589. {
  590. StringBuilder sp = new StringBuilder(512);
  591. int minQi = 0, y = 0, j = 1, endQi = 0, line = 1, _qi = 0;
  592. int year = (int)latestQi / 1000;
  593. int startQi = year * 1000 + 1;
  594. switch (lottery)
  595. {
  596. case "qlc":
  597. minQi = 2002001;
  598. break;
  599. case "3d":
  600. minQi = 2002001;
  601. break;
  602. case "ssq":
  603. minQi = 2003001;
  604. break;
  605. case "dlt":
  606. minQi = 2007001;
  607. break;
  608. case "p3":
  609. minQi = 2004001;
  610. break;
  611. case "p5":
  612. minQi = 2004001;
  613. break;
  614. case "qxc":
  615. minQi = 2006001;
  616. break;
  617. case "3dshijihao":
  618. minQi = 2002001;
  619. break;
  620. case "p3shijihao":
  621. minQi = 2004001;
  622. break;
  623. case "hc1":
  624. minQi = 2002001;
  625. break;
  626. case "df6j1":
  627. minQi = 2016059;
  628. break;
  629. case "hd15x5":
  630. minQi = 2016138;
  631. break;
  632. case "hn22x5":
  633. minQi = 2016138;
  634. break;
  635. case "ny36x7":
  636. minQi = 2016138;
  637. break;
  638. case "hb22X5":
  639. minQi = 16138;
  640. break;
  641. case "hb30x5":
  642. minQi = 16001;
  643. break;
  644. case "xj35x7":
  645. minQi = 2016040;
  646. break;
  647. case "js7ws":
  648. minQi = 16079;
  649. break;
  650. case "zj6j1":
  651. minQi = 16060;
  652. break;
  653. case "fj31x7":
  654. minQi = 16082;
  655. break;
  656. case "fj36x7":
  657. minQi = 16059;
  658. break;
  659. }
  660. while (line <= topSize)
  661. {
  662. _qi = (int)latestQi - j;
  663. if (_qi < minQi)
  664. break;
  665. if (_qi < startQi)
  666. {
  667. y = y + 1;
  668. startQi = (year - y) * 1000 + 1;
  669. endQi = (year - y) * 1000 + 153;
  670. if (lottery == "3d" || lottery == "p3" || lottery == "p5" || lottery == "3dshijihao" || lottery == "p3shijihao" || lottery == "hc1" || lottery == "df6j1" || lottery == "hd15x5" || lottery == "hn22x5" || lottery == "ny36x7" || lottery == "xj35x7")
  671. {
  672. endQi = (year - y) * 1000 + 358;
  673. if (2014 == (year - y))
  674. endQi = 2014357;
  675. }
  676. if (0 == ((year - y) % 4))
  677. {
  678. endQi = endQi + 1;
  679. }
  680. latestQi = endQi;
  681. _qi = endQi;
  682. j = 0;
  683. }
  684. //todo:临时增加需要补位的彩种缩写
  685. if (lottery == "zj6j1" || lottery == "js7ws" || lottery == "hb22x5" || lottery == "hb30x5" || lottery == "fj31x7" || lottery == "fj36x7")
  686. {
  687. _qi = 2000000 + _qi;
  688. }
  689. sp.AppendFormat("<option>{0}</option>", _qi);
  690. j++;
  691. line++;
  692. }
  693. return sp.ToString();
  694. }
  695. /// <summary>
  696. /// 模拟开奖号、试机号、开机号期数下拉列表
  697. /// </summary>
  698. /// <param name="topSize"></param>
  699. /// <param name="latestQi"></param>
  700. /// <param name="lottery"></param>
  701. /// <param name="formatHTML"></param>
  702. /// <param name="formatUrl"></param>
  703. /// <returns></returns>
  704. public static string GetLotteryDDLQi(int topSize, long latestQi, string lottery, string formatHTML, string formatUrl)
  705. {
  706. var sp = new StringBuilder(topSize * (formatHTML.Length + formatUrl.Length + 10));
  707. int minQi = 0, y = 0, j = 0, endQi = 0, line = 1, _qi = 0;
  708. int year = (int)latestQi / 1000;
  709. int startQi = year * 1000 + 1;
  710. switch (lottery)
  711. {
  712. case "qlc":
  713. minQi = 2002001;
  714. break;
  715. case "3d":
  716. minQi = 2002001;
  717. break;
  718. case "ssq":
  719. minQi = 2003001;
  720. break;
  721. case "dlt":
  722. minQi = 2007001;
  723. break;
  724. case "p3":
  725. minQi = 2004001;
  726. break;
  727. case "p5":
  728. minQi = 2004001;
  729. break;
  730. case "qxc":
  731. minQi = 2006001;
  732. break;
  733. case "3dshijihao":
  734. minQi = 2002001;
  735. break;
  736. case "p3shijihao":
  737. minQi = 2004001;
  738. break;
  739. case "hc1":
  740. minQi = 2002001;
  741. break;
  742. }
  743. while (line <= topSize)
  744. {
  745. _qi = (int)latestQi - j;
  746. if (_qi < minQi)
  747. break;
  748. if (_qi < startQi)
  749. {
  750. y = y + 1;
  751. startQi = (year - y) * 1000 + 1;
  752. endQi = (year - y) * 1000 + 153;
  753. if (lottery == "3d" || lottery == "p3" || lottery == "p5" || lottery == "3dshijihao" || lottery == "p3shijihao" || lottery == "hc1")
  754. {
  755. endQi = (year - y) * 1000 + 358;
  756. if (2014 == (year - y))
  757. endQi = 2014357;
  758. }
  759. if (0 == ((year - y) % 4))
  760. {
  761. endQi = endQi + 1;
  762. }
  763. latestQi = endQi;
  764. _qi = endQi;
  765. j = 0;
  766. }
  767. sp.AppendFormat(formatHTML, string.Format(formatUrl, _qi), _qi);
  768. j++;
  769. line++;
  770. }
  771. return sp.ToString();
  772. }
  773. /// <summary>
  774. /// 福建31选7三区比
  775. /// </summary>
  776. /// <param name="list"></param>
  777. /// <returns></returns>
  778. public static string Fj31x7SanQu(IList<int> list)
  779. {
  780. int sanqu = 0, sanqu1 = 0, sanqu2 = 0;
  781. foreach (int item in list)
  782. {
  783. if (item >= 1 && item <= 10)
  784. {
  785. sanqu++;
  786. }
  787. if (item >= 11 && item <= 20)
  788. {
  789. sanqu1++;
  790. }
  791. if (item >= 21 && item <= 31)
  792. {
  793. sanqu2++;
  794. }
  795. }
  796. return string.Format("{0}:{1}:{2}", sanqu, sanqu1, sanqu2);
  797. }
  798. /// <summary>
  799. /// 福建31选7三区比
  800. /// </summary>
  801. /// <param name="list"></param>
  802. /// <returns></returns>
  803. public static string Fj36x7SanQu(IList<int> list)
  804. {
  805. int sanqu = 0, sanqu1 = 0, sanqu2 = 0;
  806. foreach (int item in list)
  807. {
  808. if (item >= 1 && item <= 12)
  809. {
  810. sanqu++;
  811. }
  812. if (item >= 13 && item <= 24)
  813. {
  814. sanqu1++;
  815. }
  816. if (item >= 25 && item <= 36)
  817. {
  818. sanqu2++;
  819. }
  820. }
  821. return string.Format("{0}:{1}:{2}", sanqu, sanqu1, sanqu2);
  822. }
  823. /// <summary>
  824. /// 华东15选5三区比
  825. /// </summary>
  826. /// <param name="list"></param>
  827. /// <returns></returns>
  828. public static string Hd15x5SanQu(IList<int> list)
  829. {
  830. int sanqu = 0, sanqu1 = 0, sanqu2 = 0;
  831. foreach (int item in list)
  832. {
  833. if (item >= 1 && item <= 5)
  834. {
  835. sanqu++;
  836. }
  837. if (item >= 6 && item <= 10)
  838. {
  839. sanqu1++;
  840. }
  841. if (item >= 11 && item <= 15)
  842. {
  843. sanqu2++;
  844. }
  845. }
  846. return string.Format("{0}:{1}:{2}", sanqu, sanqu1, sanqu2);
  847. }
  848. /// <summary>
  849. /// 南粤36选7三区比
  850. /// </summary>
  851. /// <param name="list"></param>
  852. /// <returns></returns>
  853. public static string Ny36x7SanQu(IList<int> list)
  854. {
  855. int sanqu = 0, sanqu1 = 0, sanqu2 = 0;
  856. foreach (int item in list)
  857. {
  858. if (item >= 1 && item <= 12)
  859. {
  860. sanqu++;
  861. }
  862. if (item >= 13 && item <= 24)
  863. {
  864. sanqu1++;
  865. }
  866. if (item >= 25 && item <= 36)
  867. {
  868. sanqu2++;
  869. }
  870. }
  871. return string.Format("{0}:{1}:{2}", sanqu, sanqu1, sanqu2);
  872. }
  873. /// <summary>
  874. /// 获取中奖数字
  875. /// </summary>
  876. /// <param name="arr1">开奖号</param>
  877. /// <param name="arr2">对比号</param>
  878. /// <returns></returns>
  879. public static int[] GetTheSameOpenCodes(int[] arr1, int[] arr2)
  880. {
  881. Array.Sort(arr1);
  882. Array.Sort(arr2);
  883. var list = new List<int>();
  884. for (int indexA = 0, lenA = arr1.Length, indexB = 0, lenB = arr2.Length; indexA < lenA && indexB < lenB;)
  885. {
  886. if (arr1[indexA] == arr2[indexB])
  887. {
  888. list.Add(arr1[indexA]);
  889. System.Diagnostics.Debug.WriteLine(arr1[indexA] + " , ");
  890. indexA++;
  891. indexB++;
  892. }
  893. else if (arr1[indexA] < arr2[indexB])
  894. {
  895. indexA++;
  896. }
  897. else
  898. {
  899. indexB++;
  900. }
  901. }
  902. return list.ToArray();
  903. }
  904. /// <summary>
  905. /// 获取命中数
  906. /// </summary>
  907. /// <returns></returns>
  908. public static int GetTheHitRate(int[] arr1, params int[] arr2)
  909. {
  910. var n = GetTheSameOpenCodes(arr1, arr2).Length;
  911. return n;
  912. }
  913. }
  914. }