UUID的人类可读替代方案

23

我正在开发一个系统,这个系统大量地使用假名来让隐私关键数据能够被研究人员使用。这些假名应该具有以下特点:

  1. 它们不应该包含任何信息(例如创建时间、与其他假名的关系、编码数据等)。
  2. 容易创建唯一的假名。
  3. 它们应该是人类可读的。这意味着人类在比较、复制和大声阅读时应该很容易理解。

我的第一个想法是使用UUID4。它们在 (1) 和 (2) 上相当好,但在 (3) 上并不太好。

另一种方法是使用更广泛的字符集对 UUID 进行编码,从而生成较短的字符串(例如 shortuuid)。但我不确定这是否会真正提高可读性。

目前我正在研究的另一种方法是从一篇 2005 年的论文中获得启发,题为 "An optimal code for patient identifiers",旨在解决我所遇到的问题。该算法描述了如何创建具有 30 位熵的 8 字符假名。不过我更倾向于使用更广泛审查的标准。

此外还有 Git 的方法:仅显示实际假名的前几个字符。但这意味着假名可能会在一段时间后失去其唯一性。

因此,我的问题是:是否有任何广泛使用的人类可读唯一标识的标准?


1
参见:https://dev59.com/sHI-5IYBdhLWcg3wSGUB - dreftymac
这个回答解决了你的问题吗?可读性 GUID - icc97
3个回答

13

目前我不知道有任何被广泛使用的标准。这里提供一种不常用的方案:

Proquints

https://arxiv.org/html/0901.4016

https://github.com/dsw/proquint

一个UUID4(128位)将被转换为8个proquints。如果这太多了,你可以只取UUID4的最后64位(即只取64个随机位)。这并不会使它失去唯一性;只是增加了碰撞的可能性,但这个可能性一开始就存在,并且你可以通过数学方法进行估算,以决定是否对你的目的仍然可行。


4

请看这里 UUID Readable

生成易于记忆且可读的UUID,这些 UUID 是莎士比亚式和语法正确的句子。


1
这是一个不错的例子。如果有人想知道,它会生成类似于这样的东西:Jacquette Brandt John the Pectus of Barnsdall doubted Glenn Gay Gregg and 12 noisy stoats。可读吗?是的。容易记住吗?不是。好玩吗?是的。 - cYee

2
这篇文章建议使用SHA-256哈希的前几个字符,类似于git的做法。UUID通常基于SHA-1,因此这并没有太大的区别。属性(2)和(3)之间的权衡在于字符数。
如果有d位数字,则总共可以得到2 **(4 * d)个标识符,但第一个碰撞预计会在2 **(2 * d)之后发生。
真正重要的问题不在于使用何种标识符,而在于如何处理碰撞。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接