最近,我们在现金支付流程中实施了Guid。仅仅十天,我们至少有十几起关于Guid碰撞的案例。 请告知为什么不同位置的不同终端产生相同的guid以及如何避免guid碰撞。
请在下面找到我们正在生成Guid的课程
public class Cash
{
public Cash()
{
Id = Guid.NewGuid();
}
public Guid Id { get; set; }
}
答案 0 :(得分:1)
不确定这是否是实际问题,但它与我公司内部正在准备的技术讲座相吻合。这是你的代码:
public class Cash
{
public Cash()
{
Id = Guid.NewGuid();
}
public Guid Id { get; set; }
}
......这个类有一个基本问题:它没有封装。简而言之,'Id'属性有一个公共setter - 这意味着任何使用'Cash'类实例的代码都可以操纵它的Id属性。
所以我的猜测是以下两个中的一个:
即使Lack-Of-Encapsulation不是导致此特定问题的原因,我高度建议您将该行更改为:
public Guid Id { get; private set; }
......或......
private Guid id;
public Id { get { return this.id } }
无论如何,正如几个人发布的那样,生成完全重复的GUID几乎是不可能的。所以我怀疑上面发布的内容实际上是导致问题的原因。