什么是错误使用DateTime.Now。作为唯一ID的主要部分? [英] What is wrong with using DateTime.Now. as main part of Unique ID?
问题描述
我用 RNGCryptoServiceProvider
来生成基于字符串的订单ID的,但是,有4个实例,其中 ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@ $%^ *( )_-
将产生一个已经存在的订单ID。
I used to use RNGCryptoServiceProvider
to generate string-based Order ID's, but, there were 4 instances where ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@$%^*()_-
would generate an already-existing Order ID.
和它让我想......
And it got me thinking...
为什么我们不能只使用这样的:
Why can't we just use something like:
<html>
...
<p>@GenerateOrderId()</p>
...
</html>
和
public string GenerateOrderId()
{
return "OID" +
DateTime.Now.Year + DateTime.Now.Month +
DateTime.Now.Day +
DateTime.Now.Hour +
DateTime.Now.Minute +
DateTime.Now.Second +
DateTime.Now.Millisecond;
}
有人告诉我,这是一个坏主意,但没有任何解释或理由,它仍然停留在我的头上。
......我想用这个,是因为它的总是的是独一无二的。
推荐答案
在计算机的速度纳秒工作。你会得到保证几乎立即生成一个重复的订单ID。
Computers work at nanosecond speeds. You would be guaranteed to generate a duplicate order ID almost immediately.
您最好的选择是使用 GUID 的 的[MSDN-C#] 的 [MSDN-SQL] (又名 UNIQUEIDENTIFIER
在SQL世界)。
Your best bet would be to use a GUID [MSDN-C#] [MSDN-SQL] (a.k.a. UNIQUEIDENTIFIER
in the SQL world).
这篇关于什么是错误使用DateTime.Now。作为唯一ID的主要部分?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!