如何从两个唯一的GUID生成唯一的GUID,这些GUID是顺序无关紧要的

时间:2014-08-15 14:16:16

标签: math wolfram-mathematica mathematical-optimization

我有一个应用程序,用户有自己的ID。 ID是唯一的。 ID是GUID,因此它们包含字母和数字。 我想要一个公式,如果我有两个ID,我可以找到它们的组合GUID,无论我使用它们的顺序。 这些GUID长度为16位,对于下面的示例,我假装它们是4位。

用户A:x43y 用户B:f29a

如果我使用带有两个参数的公式X:X(a,b)我希望生成的代码给出相同的结果,无论a = UserA还是UserB的GUID。 我不需要一种方法来从这个公式中找到给定的用户ID - 即它是一种单向方法。

感谢您的任何答案或指示

1 个答案:

答案 0 :(得分:1)

所以我将我的评论转化为答案。然后这个问题就可以得到解答,答案被接受(如果它足够好),我们都可以继续前进。

按字典顺序对GUID排序,并将第二个附加到第一个。结果是独一无二的,并具有您所要求的所有其他特征。

你可以压缩它(我知道你写了缩短但是对我不满)最多16个字符吗?不,你不能;不是,也就是说,如果你想再次解压缩并恢复原始位。 (您已经写过,您不需要能够恢复原始GUID,如果您愿意,可以跳过下一段。)

GUID本质上是128位的随机序列。根据定义,随机序列不能被压缩。如果128位的序列是可压缩的,则它不能是随机的,必须有一些算法用于将压缩版本膨胀回128位。我知道,由于GUID是通过算法生成的,因此它们不是真正随机的。然而,在实践中,几乎没有必要将它们视为真正随机的东西;我当然不认为你应该浪费时间来压缩它们。

鉴于可能的GUID总数很大,您可能会对每个单独GUID的前半部分并从中组装伪GUID的方法感到满意。根据您的系统可能使用的GUID数量以及您对风险的偏好,这可能会满足您的实际需求。