我尝试在我们的C#应用程序中使用long作为唯一ID(不是全局的,仅用于一个会话)用于我们的事件.你知道以下是否会生成一个唯一的长ID?
public long GenerateId()
{
byte[] buffer = Guid.NewGuid().ToByteArray();
return BitConverter.ToInt64(buffer, 0);
}
Run Code Online (Sandbox Code Playgroud)
为什么我们不直接使用GUID?我们认为8字节长就足够了.
在此答案中,发布了以下代码,用于创建唯一的随机字母数字字符串.有人可以向我澄清他们在这段代码中是如何确保它们的独特性以及它们在多大程度上是独一无二的?如果我在不同的场合重新运行这种方法,我还会得到独特的字符串吗?
或者我只是误解了答案,这些根本没有生成唯一的密钥,只是随机的?
我已经在对该答案的评论中询问了这一点,但用户似乎处于非活动状态.
public static string GetUniqueKey()
{
int maxSize = 8;
char[] chars = new char[62];
string a;
a = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
chars = a.ToCharArray();
int size = maxSize;
byte[] data = new byte[1];
RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider();
crypto.GetNonZeroBytes(data);
size = maxSize;
data = new byte[size];
crypto.GetNonZeroBytes(data);
StringBuilder result = new StringBuilder(size);
foreach (byte b in data)
{ result.Append(chars[b % (chars.Length - 1)]); }
return result.ToString();
}
Run Code Online (Sandbox Code Playgroud)