什么是错误使用DateTime.Now。作为唯一ID的主要部分? [英] What is wrong with using DateTime.Now. as main part of Unique ID?

查看:327
本文介绍了什么是错误使用DateTime.Now。作为唯一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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆