唯一ID号C#

时间:2014-08-23 16:57:39

标签: c# silverlight

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

这是个好主意吗?

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

4 个答案:

答案 0 :(得分:1)

你可以试试这个:

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

检查GUID

  

表示全局唯一标识符(GUID)。

     

<强>说明:

     

GUID是128位整数(16字节),可以在所有中使用   计算机和网络,无论何处需要唯一标识符。这样   标识符被复制的可能性非常低。

答案 1 :(得分:1)

  

这是个好主意吗?

不,这不是一个好主意。

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

正如经常提到的那样,GUID将是生成唯一值的不错选择。无法保证在GUID上获得%100。但它就像%99.999999999999999999999。这就是碰撞概率非常小的原因。

来自维基百科页面;

  

虽然不保证每个生成的GUID都是唯一的,但总数   唯一键的数量(2 ^ 128或3.4×10 ^ 38)是如此之大   两次生成相同数字的概率非常小。   例如,考虑包含about的可观察Universe   5×10 ^ 22颗星;那么每颗星都可以拥有6.8×10 ^ 15的独特性   的GUID。

答案 2 :(得分:0)

为什么不使用GUID?

var id = Guid.NewGuid();

答案 3 :(得分:0)

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;
}
相关问题