颐和api

UniqueData.cs 3.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. namespace MadRunFabric.Common
  5. {
  6. /// <summary>
  7. /// 生成唯一数
  8.     /// </summary>
  9. public class UniqueData
  10. {
  11. private static object obj = new object();
  12. private static int GuidInt { get { return Guid.NewGuid().GetHashCode(); } }
  13. private static string GuidIntStr { get { return Math.Abs(GuidInt).ToString(); } }
  14. /// <summary>
  15.         /// 生成
  16.         /// </summary>
  17.         /// <param name="mark">前缀</param>
  18.         /// <param name="timeType">时间精确类型  1 日,2 时,3 分,4 秒(默认) </param>
  19.         /// <param name="id">id 小于或等于0则随机生成id</param>
  20.         /// <returns></returns>
  21. public static string Gener(string mark, int timeType = 4, int id = 0)
  22. {
  23. lock (obj)
  24. {
  25. var number = mark;
  26. var ticks = (DateTime.Now.Ticks - GuidInt).ToString();
  27. int fillCount = 0;//填充位数
  28. number += GetTimeStr(timeType, out fillCount);
  29. if (id > 0)
  30. {
  31. number += ticks.Substring(ticks.Length) + id.ToString().PadLeft(10, '0');
  32. }
  33. else
  34. {
  35. number += ticks.Substring(ticks.Length) + GuidIntStr.PadLeft(10, '0');
  36. }
  37. return number;
  38. }
  39. }
  40. /// <summary>
  41.         /// 生成
  42.         /// </summary>
  43.         /// <param name="mark">前缀</param>
  44.         /// <param name="timeType">时间精确类型  1 日,2 时,3 分,4 秒(默认)</param>
  45.         /// <param name="id">id 小于或等于0则随机生成id</param>
  46.         /// <returns></returns>
  47. public static string GenerLong(string mark, int timeType = 4, long id = 0)
  48. {
  49. lock (obj)
  50. {
  51. var number = mark;
  52. var ticks = (DateTime.Now.Ticks - GuidInt).ToString();
  53. int fillCount = 0;//填充位数
  54. number += GetTimeStr(timeType, out fillCount);
  55. if (id > 0)
  56. {
  57. number += ticks.Substring(ticks.Length - fillCount) + id.ToString().PadLeft(19, '0');
  58. }
  59. else
  60. {
  61. number += GuidIntStr.PadLeft(10, '0') + ticks.Substring(ticks.Length - (9 + fillCount));
  62. }
  63. return number;
  64. }
  65. }
  66. /// <summary>
  67.         /// 获取时间字符串
  68.         /// </summary>
  69.         /// <param name="timeType">时间精确类型  1 日,2 时,3 分,4 秒(默认)</param>
  70.         /// <param name="fillCount">填充位数</param>
  71.         /// <returns></returns>
  72. private static string GetTimeStr(int timeType, out int fillCount)
  73. {
  74. var time = DateTime.Now;
  75. if (timeType == 1)
  76. {
  77. fillCount = 6;
  78. return time.ToString("yyMMdd");
  79. }
  80. else if (timeType == 2)
  81. {
  82. fillCount = 4;
  83. return time.ToString("yyMMddHH");
  84. }
  85. else if (timeType == 3)
  86. {
  87. fillCount = 2;
  88. return time.ToString("yyMMddHHmm");
  89. }
  90. else
  91. {
  92. fillCount = 0;
  93. return time.ToString("yyMMddHHmmss");
  94. }
  95. }
  96. }
  97. }