可以使用 DateTime.Now 的 Ticks 生成重复的唯一标识符吗?

问题描述

代码是否有可能生成相同的身份,

for (int i = 0; i < 20; i++)
    {
        string TransID = DateTime.Now.Ticks.ToString();
    }

导致这种情况发生的考虑因素是什么?

解决方法

是的,此代码可以生成相同的标识符。

无论刻度精度如何,如果在 Windows 和/或 Bios 中更改系统日期,它都可以这样做。

如果它是由不同时区的计算机运行的,或者如果您旅行。

后一种情况意味着即使在本地和未连接的应用程序中,您也绝对不应使用此类代码。

如果你个人和本地申请需要身份证,而且你从不旅行,这个代码可以做你想做的,但不建议使用这种糟糕的模式。

正如大家所说,没有错,您应该使用 Guid.New() 这实际上是最安全的标准,或者使用 int 或长自动增量(对于本地或由服务器管理)以获得更好的性能案例。

https://docs.microsoft.com/dotnet/api/system.datetime.now

https://en.wikipedia.org/wiki/Unique_identifier

https://en.wikipedia.org/wiki/Universally_unique_identifier

How expensive is a GUID cast and comparison vs a string comparison

,

首先,让我们定义一下什么是勾号。一个滴答声代表一百纳秒或百万分之一秒。

1 秒 = 1000 万次滴答

基本上,如果您不同时生成两个 ID,那就没问题。

另外,我建议您观看 GUID 作为替代。这取决于您要实现的目标。

这段代码

for (int i = 0; i < 20; i++)
{
    string TransID = DateTime.Now.Ticks.ToString();
}

不会在每秒执行超过 1000 万次循环的计算机上生成唯一的 TransID。