如何命名UUID,以便以后可以判断它是否是使用该命名空间生成的?
特别是,我正在考虑使用UUIDv5.然而,据我所知,在不知道名称的情况下,无法判断特定的UUID是否是使用特定的名称空间生成的.
我曾考虑简单地生成UUID v4,并用常量值替换前4个字符,例如0001
或0002
,然后判断UUID是否使用该前缀.我意识到这将降低UUID的基数.然而,这对于任何名称空间解决方案都是正确的.我更担心的是,这会使v4UUID无效.
如何命名UUID,以便以后可以判断它是否是使用该命名空间生成的?
特别是,我正在考虑使用UUIDv5.然而,据我所知,在不知道名称的情况下,无法判断特定的UUID是否是使用特定的名称空间生成的.
我曾考虑简单地生成UUID v4,并用常量值替换前4个字符,例如0001
或0002
,然后判断UUID是否使用该前缀.我意识到这将降低UUID的基数.然而,这对于任何名称空间解决方案都是正确的.我更担心的是,这会使v4UUID无效.
然而,据我所知,在不知道名称的情况下,无法判断特定的UUID是否是使用特定的名称空间生成的.
对,是这样.V5 UUID中的命名空间与键一起散列在一起,没有办法反转它.
我已经考虑过简单地生成UUID v4并用常量值替换前4个字符
好的.这是一种非常常见的方法,尽管我通常看到人们使用比2更多的字节作为前缀.我看到的大多数人在开头使用几个字节的常量但随机的前缀,然后是他们的内部名称空间,然后是随机id.但这真的无关紧要.只要您的UUID不会与其他系统的UUID混合在一起,就不需要担心前缀部分中的冲突.而且,只要足够多的字节仍然是随机的,您就绝对不必担心在其他地方会发生冲突.
在v4 UUID中只定义了6-8位和they're not at the beginning位.它是十六进制编码中第17位的第13位和不同部分.所以我可能会避免弄乱这两个数字,但我从来没有遇到过真正验证版本信息的系统.如果你只是生成一个随机的128位,它将在我见过的每个系统中都能很好地工作.但我坚持格式,所以我个人always set the bits correctly,主要是因为它让我高兴,而不是因为消费系统实际上关心.您的方案很好,只要您没有与其他系统混合在一起,在这些系统中,其他人可能 Select 了相同的名称空间标识符.