2010-12-10 69 views
2

如何在没有数据库的情况下在c#中生成唯一编号?生成没有数据库的唯一编号

(最大17位)。

编辑:数字只。

+0

定义“唯一”。 – ybungalobill 2010-12-10 11:06:45

+6

独特性如何?独特的当前过程?机器?宇宙? – 2010-12-10 11:06:47

+0

@Malachi:记住随机可能产生两次相同的数字;所以它不一定是唯一的。 – 2010-12-10 11:07:38

回答

6

你可以看看Twitter的开源Snowflake project寻找灵感,它解决了类似的问题。它是用Scala编写的,但是简化版本在C#中编码非常简单。

前提是获取当前的时间戳,并将其左移一位,将右侧的位留给一个简单的序列号,每当时间戳增量时将其复位为0。通过处理位长和改变时间戳的粒度(例如决定是使用秒还是毫秒),你应该能够很容易地生成可以适合17位的东西。

0

您可以使用GUID,GUID(全局唯一标识符)是一个128位整数,可用于唯一标识某些内容。

System.Guid.NewGuid()

+1

2^128 = 3.4 * 10^38> 10^17即你违反17位数的要求 – CodesInChaos 2010-12-10 15:24:05