UUID的人类可读替代方案

问题描述 投票:5回答:2

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

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

我的第一个想法是使用UUID4。它们在(1)和(2)上相当不错,但在(3)中却没有那么多。

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

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

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

所以我的问题是:人类可读的独特ID是否有任何广泛使用的标准?

standards uuid human-readable
2个回答
4
投票

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

Proquints

https://arxiv.org/html/0901.4016

https://github.com/dsw/proquint

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


0
投票

This article建议使用SHA-256哈希中的前几个字符,类似于git所做的。 UUID通常基于SHA-1,因此并非完全不同。属性(2)和(3)之间的权衡是字符数。

由于d是数字的位数,你总共得到2 ** (4 * d)标识符,但第一次碰撞预计会在2 ** (2 * d)之后发生。

最大的问题不在于您使用的标识符类型,而是您处理冲突的方式。

© www.soinside.com 2019 - 2024. All rights reserved.