唯一的id号c#
本文关键字:id 唯一 | 更新日期: 2023-09-27 18:19:09
我需要在"离线"silverlight oob应用程序的隔离存储中存储一些销售事务。我正在考虑使用DateTime.Now.Ticks生成一个唯一的数字来跟踪哪个事务是哪个事务。
这是个好主意吗?
提前感谢您的回答。我知道这是个愚蠢的问题。
你可以试试:
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;
}