2010-04-17 138 views
-3

我要生成在.NET具有以下格式的唯一标识符:唯一标识符

XXXXX-XXXXX

其中x是一个数{0-9};

+7

请定义“唯一”的范围。 – Armin 2010-04-17 08:03:51

+2

闻起来像功课。在这里获得帮助的最佳实践是向你展示你已经完成的事情。来吧,试试看,这里的人会让你摆脱困境。 – 2010-04-17 08:08:47

+3

Alex,阅读此博客条目。它会吓到你sh **** ss:http://blogs.msdn.com/ericlippert/archive/2010/03/22/socks-birthdays-and-hash-collisions.aspx – 2010-04-18 17:16:14

回答

-1

嗯,它不会像真正的Guid那样独一无二,但你可以使用随机生成每个数字。一定要使用专用静态随机对象,以避免得到相同的随机序列:

private static m_random as new System.Random(); 
public string MySpecialID() 
{ 
    return string.Format("{0}{1}{2}{3}{4}-{5}{6}{7}{8}{9}", 
     m_random.Next(0, 10), 
     m_random.Next(0, 10), 
     m_random.Next(0, 10), 
     m_random.Next(0, 10), 
     m_random.Next(0, 10), 
     m_random.Next(0, 10), 
     m_random.Next(0, 10), 
     m_random.Next(0, 10), 
     m_random.Next(0, 10), 
     m_random.Next(0, 10)); 
} 
+1

你也可以生成两个随机数介于0到99999之间,填充零(使用格式)?我觉得会有分布差异,但我的大脑在凌晨4点不起作用。 – Sapph 2010-04-17 08:17:23

+5

经过120,000次插入后,该算法的碰撞几率有超过50%。 – 2010-04-17 09:03:43

17

我要生成与以下格式.NET的唯一标识符:XXXXX-XXXXX其中x是一个数字{ 0-9}

好的,没问题。我们不需要为此编写程序。我们只会亲手做。

00000-00000是具有该格式的唯一标识符。完成。

哦,你想要多一个?那么,你可能应该在问题陈述中说过。 :)

该语言中有100亿个字符串,并且按顺序生成它们是微不足道的。因此,为您的第一个唯一标识符生成00000-00000。然后00000-00001为您的第二个唯一标识符。然后00000-00002为您的第三个唯一标识符。等等。您将能够以这种方式生成100亿个唯一标识符;你所要做的就是跟踪哪一个是以前生成的最高值。

+1

不要傻,使用自动增量,如果你想要完成像你所说的那样微不足道的事情。这不是一个答案。事实上它是一个笑话。 – 2010-04-18 12:01:00

+8

我向你保证,这是一个答案,并不愚蠢。 – 2010-04-18 15:18:11

+1

这在程序运行之间创建相同ID的可能性要高得多。您必须确保在世界各地运行的程序的所有实例都知道最近的ID是什么。这只是一个非常具体的(很可能是假想的)情况下的好答案。 – 2010-04-18 16:31:19