c# - 使用设置的前缀创建 GUID

标签 c# guid

我想知道是否有一种方法可以生成有效的 GUID/UUID,其中第一部分(或任何部分)是用户选择的前缀。

即,GUID 的格式为 AAAAAAAA-BBBB-CCCC-DDDD-DDDDDDDDDDDD,我想将任何部分设置为预定义值(最好是 AAA)。目标是让 GUID 仍然是全局唯一的,但它们不需要加密安全。

最佳答案

抱歉,您对 GUID 的要求太多了。从您的问题和您自己的答案/更新中总结,您希望它

  • 1 是一个 GUID
  • 2 不与任何其他 GUID 冲突(全局唯一)
  • 3 忽略第一位解释的标准,使用保留值
  • 4 对剩余部分使用个人方案

这是不可能的,证明: 如果可能的话,我可以生成一个 GUID G1,而您可以生成另一个 GUID G2。由于我们都忽略了标准并使用相同的保留前缀,而我对其他位的个人方案不在您的控制范围内,因此我的 GUID G1 可能会与您的 GUID G2 冲突。 GUID的非冲突性源于坚持GUID标准。

防止碰撞的机制确实本质上是隐私敏感的。如果我随机生成一个 GUID G1,如果满足两个条件,我可以保证随机 GUID 是唯一的:

  • 1 它是我控制下的 GUID 子集的成员,并且
  • 2 我之前没有生成 GUID。

对于您控制的子集之外的 GUID,您无法保证 (2)。但是如何将不重叠的 GUID 子集分配给一个人呢?使用 NIC 的 MAC 是一种简单有效的方法。其他方式也是可能的。但无论如何,仅存在这样一个子集就会涉及隐私。它必须属于某个人,我必须能够确定那是我还是其他人。证明两个随机 GUID G1 和 G2 是否属于同一子集(即人)有点困难,但当前方案(您反对)不会试图隐藏这一点。

关于c# - 使用设置的前缀创建 GUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/352674/

相关文章:

c# - 如何修复 Resharper 对象初始值设定项缩进作为方法参数

c# - 使用 libgit2sharp pull 特定提交

c++ - .NET 和 Linux 之间的 GUID/UUID 兼容性问题

sql - 为什么 IDENTITY 优于 GUID 作为数据仓库的主键?

c# - 如何在 C# 中获取 facebook 签名请求

c# - 类似于语法高亮的 Resharper

c# - 基于原始 SDK 的 kinect 数据需要什么校正数学

c++ - 在 C++ 中同时使用 IFileDialog 和 SHBrowseForFolder

sql-server - SQL Server 中的数据本地化与 GUID 或...?

c++ - 如何从 Windows 库的 GUID 获取 PIDL?