唯一的id号c#

本文关键字:id 唯一 | 更新日期: 2023-09-27 18:19:09

我需要在"离线"silverlight oob应用程序的隔离存储中存储一些销售事务。我正在考虑使用DateTime.Now.Ticks生成一个唯一的数字来跟踪哪个事务是哪个事务。

这是个好主意吗?

提前感谢您的回答。我知道这是个愚蠢的问题。

唯一的id号c#

你可以试试:

public string generateUniqueID()
{
    return Guid.NewGuid().ToString("N");
}

检查GUID

表示全局唯一标识符。

备注:

GUID是一个128位整数(16字节),可以在所有类型中使用需要唯一标识符的计算机和网络。这样的标识符被重复的概率非常低。

这是个好主意吗?

不,这不是个好主意。

因为DateTime.Now表示计算机上的本地时间。这意味着如果您的服务器上的本地时间发生任何变化(手动更改,服务器上的任何崩溃影响本地时间,夏令时等),您的代码可能(这是一个小概率,但…)生成相同的id值。

正如其他人建议的那样,GUID将是生成唯一值的好选择。不能保证在GUID上获得%100。但它就像% 99.999999999999999999999999999。这就是为什么碰撞概率非常非常小。

来自维基百科页面;

虽然不能保证每个生成的GUID都是唯一的,但是总的唯一密钥的数量(2^128或3.4×10^38)太大了两次生成相同数字的概率非常小。例如,考虑可观测的宇宙,它包含大约5×10 ^ 22明星;每一颗恒星都可能有6.8×10^15是唯一的guid。

为什么不使用GUID呢?

var id = Guid.NewGuid();
private string generateUniqueID(int size) //recieves the size of the wanted hex ID
{
    bool done = true;
    string n_id = "";

    while (!done)
    {
        done = true;
        while (n_id.Length < size + 1)
            n_id += Char.ConvertFromUtf32(new Random().Next(48, 90));
        foreach (Transaction i in tns) //I used this for each to check if the generated ID already exists, you can use an external function.
        {
            if (i.ID == n_id)
            {
                done = false;
                break;
            }
        }
    }
    return n_id;
}