创建通用用户ID的最佳实践

时间:2010-06-21 18:43:22

标签: c# .net asp.net hash

在asp.net应用程序上实现为用户创建和分配ID的方法的最佳方法是什么?

我在考虑使用DateTime刻度和线程ID

我想确保没有冲突,用户ID是唯一的。

ID可以是字符串或长。

我应该在用户收集的一些信息上使用MD5吗?会是什么?

我看到md5的碰撞率非常低。

3 个答案:

答案 0 :(得分:7)

我会根据您提供的有限信息使用GUID。

答案 1 :(得分:3)

最简单的解决方案是自动增加的数字。这需要一个中央服务器。

日期/时间加上单向散列用于伪随机ID。为安全起见,他们必须是伪随机的吗?这不应该依赖于唯一性,因为根据定义,单向散列会发生碰撞。在发出ID之前,您仍然需要一个中央服务器来检查重复项。

如果在分布式系统中创建ID(没有用于生成ID的中央服务器),则GUID最佳。 GUID可以在不同的机器上生成,它们不应该发生冲突。取决于实现,但有些GUID算法只是伪随机的,是的,仍有可能发生冲突。

答案 2 :(得分:1)

到目前为止,Guid是为用户ID生成唯一ID的最佳选择。绝对保证unique globally(因此得名)。为了最好地使用聚簇索引,您应该使用NEWSEQUENTIALID()。这会生成可以附加到索引的顺序ID,并防止sql server每次添加值时都必须重新组织并分页索引。使用此功能存在一个小的安全问题,因为可以确定序列中的下一个值。