我正在研究一种大量使用假名的系统,以便为研究人员提供隐私关键数据。这些假名应具有以下属性:
我的第一个想法是使用UUID4。它们在(1)和(2)上相当不错,但在(3)上却没有那么多。
一种变体是使用更宽的字母表对UUID进行编码,从而产生更短的字符串(例如参见shortuuid)。但我不确定这是否真的提高了可读性。
我目前正在研究的另一种方法是2005年的一篇题为"An optimal code for patient identifiers"的论文,旨在解决我的问题。这里描述的算法创建了具有30位熵的8字符假名。我更愿意使用更广泛审查的标准。
然后还有git方法:只显示实际假名的前几个字符。但这意味着化名可能在一段时间后失去其独特性。
所以我的问题是:人类可读的独特ID是否有任何广泛使用的标准?
答案 0 :(得分:3)
不知道任何广泛使用的标准。这是一个非广泛使用的:
Proquints
https://arxiv.org/html/0901.4016
https://github.com/dsw/proquint
UUID4(128位)将被转换为8个proquints。如果这太多了,你可以取UUID4的最后64位(=只取64个随机位)。这并不会让它神奇地失去独特性;只增加碰撞的似然,一开始就是非零,你可以用数学方法估算它是否仍然可以用于你的目的。
答案 1 :(得分:0)
This article建议使用SHA-256哈希中的前几个字符,与git相似。 UUID通常基于SHA-1,因此并没有什么不同。属性(2)和(3)之间的权衡在于字符数。
使用d
作为位数,您总共获得了2 ** (4 * d)
个标识符,但是第一次冲突预计会在2 ** (2 * d)
之后发生。
最大的问题实际上与您使用的标识符类型无关,而是如何处理冲突。
答案 2 :(得分:0)
crabmeat-coach-properly-driving-yoga-ferret edition-mousy-fabric-budding-book-mortuary rickety-uncrown-earful-majority-sublet-evade
答案 3 :(得分:0)
生成易于记忆、可读的 UUID,即莎士比亚式和语法正确的句子