我需要将一些销售交易存储在隔离存储中,并且离线" silverlight oob应用程序。 我正在考虑生成一个唯一的数字来跟踪使用DateTime.Now.Ticks的事务。
这是个好主意吗?
提前感谢您的答案。我知道这是一个愚蠢的问题。
答案 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;
}