【问题标题】:Human readable alternative for UUIDsUUID 的人类可读替代方案
【发布时间】:2018-03-27 07:03:18
【问题描述】:

我正在开发一个系统,该系统大量使用假名来向研究人员提供对隐私至关重要的数据。这些假名应具有以下属性:

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

我的第一个想法是使用UUID4。它们在 (1) 和 (2) 方面都相当出色,但在 (3) 方面则不然。

一种变体是使用更宽的字母表对 UUID 进行编码,从而生成更短的字符串(例如参见 shortuuid)。但我不确定这是否真的提高了可读性。

我目前正在研究的另一种方法是 2005 年的一篇题为 "An optimal code for patient identifiers" 的论文,旨在解决我的问题。那里描述的算法创建具有 30 位熵的 8 个字符的假名。不过,我更愿意使用更广泛审查的标准。

然后还有git方式:只显示实际笔名的前几个字符。但这意味着假名可能会在一段时间后失去其唯一性。

所以我的问题是:对于人类可读的唯一 ID,是否有任何广泛使用的标准?

【问题讨论】:

标签: standards uuid human-readable


【解决方案1】:

不知道有任何广泛使用的标准。这是一个未广泛使用的:

Proquins

https://arxiv.org/html/0901.4016

https://github.com/dsw/proquint

一个 UUID4(128 位)将被转换为 8 个 proquint。如果这太多了,你可以取 UUID4 的最后 64 位(= 只取 64 个随机位)。这不会让它神奇地失去独特性;只会增加碰撞的可能性,它一开始是非零的,你可以用数学方法估计它是否仍然适合你的目的。

【讨论】:

    【解决方案2】:

    This article 建议使用 SHA-256 哈希的前几个字符,类似于 git 所做的。 UUID 通常基于 SHA-1,所以这并没有什么不同。属性 (2) 和 (3) 之间的权衡在于字符数。

    d 是位数,您总共会得到 2 ** (4 * d) 标识符,但预计第一次冲突将在 2 ** (2 * d) 之后发生。

    真正的大问题不在于您使用哪种标识符,而在于您如何处理冲突。

    【讨论】:

      【解决方案3】:

      给你UUID Readable

      生成易于记忆、可读的 UUID,即莎士比亚式且语法正确的句子

      【讨论】:

      • 这个不错。如果有人想知道,它会生成类似这样的东西:Jacquette Brandt John the Pectus of Barnsdall doubted Glenn Gay Gregg and 12 noisy stoats。它可读吗?是的。它是“值得记住的”吗?不。乐趣:是的。
      猜你喜欢
      • 1970-01-01
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-20
      • 2010-10-26
      • 2012-12-11
      相关资源
      最近更新 更多