产生有序的全局唯一Id
//利用时间和Guid作为种子产生随机数 private string GenerateUniqueID() { System.Text.StringBuilder sb = new System.Text.StringBuilder(); string str1 = DateTime.Now.ToString("yyyyMMddHHmmss"); Random d = new Random(Guid.NewGuid().GetHashCode()); string str2 = d.Next(10000, 100000).ToString(); return sb.Append(str1).Append(str2).ToString(); }
//利用时间和RNGCryptoServiceProvider产生 public static string GenerateOrderNumber() { string strDateTimeNumber = DateTime.Now.ToString("yyyyMMddHHmmssms"); string strRandomResult = NextRandom(1000, 1).ToString(); return strDateTimeNumber + strRandomResult; } /// <summary> /// 参考:msdn上的RNGCryptoServiceProvider例子 /// </summary> /// <param name="numSeeds"></param> /// <param name="length"></param> /// <returns></returns> private static int NextRandom(int numSeeds, int length) { // Create a byte array to hold the random value. byte[] randomNumber = new byte[length]; // Create a new instance of the RNGCryptoServiceProvider. System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider(); // Fill the array with a random value. rng.GetBytes(randomNumber); // Convert the byte to an uint value to make the modulus operation easier. uint randomResult = 0x0; for (int i = 0; i < length; i++) { randomResult |= ((uint)randomNumber[i] << ((length - 1 - i) * 8)); } return (int)(randomResult % numSeeds) + 1; }