1.使用GUID19位的唯一随机数:
/// <summary>
/// GUID可直接转换为19位十进制数字
/// </summary>
/// <returns></returns>
public static long GuidToLongID()
{
byte[] buffer = Guid.NewGuid().ToByteArray();
return BitConverter.ToInt64(buffer, 0);
}
2.使用Random来获取指定长度重复率较低的随机数
Random在使用时,关键在于种子的制造,否则会使得在并发时生成的随机数重复率很高。
可通过一下方式获取种子
方法一:
static int GetRandomSeed()
{
byte[] bytes = new byte[4];
System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider();
rng.GetBytes(bytes);
return BitConverter.ToInt32(bytes, 0);
}
方法二:
static int GetRandomSeed()
{
return BitConverter.ToInt32(Guid.NewGuid().ToByteArray(), 0);
}
获取定长随机数
static string GetRandomString(int length)
{
if (length <= 0)
return "0";
Random random = new Random(GetRandomSeed());
return random.Next(10*(length-1), 10*length).ToString();//random.next 包含最小值不包含最大值
}
3.使用随机数获取指定长度的唯一数
两种方法:
一种是GUID与定长随机数的组合
另一种是时间字符串与定长随机数的组合,为了避免时间字符串的重复,可在每次方法调用时暂停一毫秒;
Thread.Sleep(1);
int length;
var specifyLenStr= DateTime.Now.ToString("yyyyMMddHHmmssffff")+GetRandomString(length);