C# 始终唯一Guid不够唯一
我有一个客户端,它要求我生成完全唯一的ID,而这些ID永远不会重复。 他不会接受这样一个事实,C# 始终唯一Guid不够唯一,c#,.net-4.5,C#,.net 4.5,我有一个客户端,它要求我生成完全唯一的ID,而这些ID永远不会重复。 他不会接受这样一个事实,Guid.NewGuid()在统计上不会重复,直到几天结束 所以我把这当作一个挑战,并试图制作一个方法,生成一个永远不会重复a.k.a.的ID 我的总体想法是,如果我能在每个Guid的末尾加入一个时间部分,那么这应该会起作用 关于如何改进这一点,有什么想法吗 namespace JensB.Tools { public class RandomGenerator { pu
Guid.NewGuid()
在统计上不会重复,直到几天结束
所以我把这当作一个挑战,并试图制作一个方法,生成一个永远不会重复a.k.a.的ID
我的总体想法是,如果我能在每个Guid的末尾加入一个时间部分,那么这应该会起作用
关于如何改进这一点,有什么想法吗
namespace JensB.Tools
{
public class RandomGenerator
{
public string GetNOnce()
{
string unique = Guid.NewGuid().ToString();
unique = unique.Replace("-", "");
long unixTimestamp = (long)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
string timeString = ToBase62(unixTimestamp);
unique = unique + timeString;
return unique;
}
private string ToBase62(long input)
{
string baseChars = ALPHANUMERIC_ALT;
string r = string.Empty;
int targetBase = baseChars.Length;
do
{
r = string.Format("{0}{1}",
baseChars[(int)(input % targetBase)],
r);
input /= targetBase;
} while (input > 0);
return r;
}
private static string ALPHANUMERIC_ALT =
"23456789" +
"abcdefghjkmnpqrstuvwxyz";
}
}
您可以维护所有先前生成的guid的列表,比如在数据库中,然后拒绝任何冲突的guid
这样,您可以保证生成的所有guid都是唯一的。您可以维护以前生成的所有guid的列表,比如在数据库中,然后拒绝任何冲突的guid
这样,您可以保证生成的所有guid都是唯一的。您可以维护以前生成的所有guid的列表,比如在数据库中,然后拒绝任何冲突的guid
这样,您可以保证生成的所有guid都是唯一的。您可以维护以前生成的所有guid的列表,比如在数据库中,然后拒绝任何冲突的guid
这样,您可以保证生成的所有guid都是唯一的。生成两个guid并将它们添加到一起。。。。那真的永远不会复制 创建guid的原始方法之一涉及机器的MAC地址和时间。
这被发现不像人们可能猜到的那么可靠。生成两个guid并将它们添加到一起。。。。那真的永远不会复制 创建guid的原始方法之一涉及机器的MAC地址和时间。
这被发现不像人们可能猜到的那么可靠。生成两个guid并将它们添加到一起。。。。那真的永远不会复制 创建guid的原始方法之一涉及机器的MAC地址和时间。
这被发现不像人们可能猜到的那么可靠。生成两个guid并将它们添加到一起。。。。那真的永远不会复制 创建guid的原始方法之一涉及机器的MAC地址和时间。 这被发现并不像人们可能猜到的那么可靠 我有一个客户端,它要求我生成完全唯一的ID,而这些ID永远不会重复 那当然不可能。看 UUID是128位整数,因此可以有2^128个唯一ID。因此,如果生成2^128+1个ID,则至少有一个重复ID
对于真实场景,
Guid.NewGuid()
就足够了
我有一个客户端,它要求我生成完全唯一的ID,而这些ID永远不会重复
那当然不可能。看
UUID是128位整数,因此可以有2^128个唯一ID。因此,如果生成2^128+1个ID,则至少有一个重复ID
对于真实场景,
Guid.NewGuid()
就足够了
我有一个客户端,它要求我生成完全唯一的ID,而这些ID永远不会重复
那当然不可能。看
UUID是128位整数,因此可以有2^128个唯一ID。因此,如果生成2^128+1个ID,则至少有一个重复ID
对于真实场景,
Guid.NewGuid()
就足够了
我有一个客户端,它要求我生成完全唯一的ID,而这些ID永远不会重复
那当然不可能。看
UUID是128位整数,因此可以有2^128个唯一ID。因此,如果生成2^128+1个ID,则至少有一个重复ID
对于现实世界的场景,
Guid.NewGuid()
就足够了。告诉你的客户他是个偏执狂,是个彻头彻尾的门外汉。创建一个包装器,该包装器将返回Guid.NewGuid()
,并为客户的传统工作向其收费。@Tarec:虽然我们中的许多人在做白日梦时肯定会这样做,“但出于业务考虑,我无法按照该建议行事”。@Tarec他在这件事上不会让步,所以我只是想看看是否有人对一个真正独特的生成器有什么想法:)大概它需要某种格式/具有某种随机性,否则为什么不使用递增值呢?你可以使用递增值并加密它。这既独特又不实用。告诉你的客户他是个偏执狂,是个彻头彻尾的门外汉。创建一个包装器,该包装器将返回Guid.NewGuid()
,并为客户的传统工作向其收费。@Tarec:虽然我们中的许多人在做白日梦时肯定会这样做,“但出于业务考虑,我无法按照该建议行事”。@Tarec他在这件事上不会让步,所以我只是想看看是否有人对一个真正独特的生成器有什么想法:)大概它需要某种格式/具有某种随机性,否则为什么不使用递增值呢?你可以使用递增值并加密它。这既独特又不实用。告诉你的客户他是个偏执狂,是个彻头彻尾的门外汉。创建一个包装器,该包装器将返回Guid.NewGuid()
,并为客户的传统工作向其收费。@Tarec:虽然我们中的许多人在做白日梦时肯定会这样做,“但出于业务考虑,我无法按照该建议行事”。@Tarec他在这件事上不会让步,所以我只是想看看是否有人对一个真正独特的生成器有什么想法:)大概它需要某种格式/具有某种随机性,否则为什么不使用递增值呢?你可以使用递增值并加密它。这既独特又不实用。告诉你的客户他是个偏执狂,是个彻头彻尾的门外汉。创建一个包装器,它将实际返回Guid.NewGuid()
和bil