我有一个客户端,它需要我生成完全独特的ID,永远不会重复。 他不会接受这样一个事实,即Guid.NewGuid()
在统计上不会重复,直到天数https://stackoverflow.com/a/1705027/937131结束。总是唯一的Guid不够独特
所以我把这作为一个挑战,并试图做出一个方法,产生一个身份证,将永远不会重复a.k.a. a NONCE。
我的一般想法是,如果我可以在每个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.NewGuid()',并为客户的工作计费。 – Tarec
@Tarec:虽然我们中的很多人在做白日梦的时候肯定会这样做,“商业上的考虑妨碍我采取这一建议”。 – Jon
@Tarec他不会就此事做出让步,所以我只是想看看是否有人对任何真正独特的发电机有任何想法:) – JensB