我有一個客戶端,它需要我生成完全獨特的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