Math 如何从顺序无关的两个唯一GUID生成唯一GUID

Math 如何从顺序无关的两个唯一GUID生成唯一GUID,math,wolfram-mathematica,mathematical-optimization,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,给定一个,从这个公式-即它是一个单向方法 感谢您

我有一个应用程序,用户有自己的ID。 ID是唯一的。 ID是GUID,因此它们包括字母和数字。 我想要一个公式,如果我有两个ID,我可以找到它们的组合GUID,不管我使用它们的顺序如何。 这些guid是16位长的,例如下面的示例,我将假设它们是4位

用户A:x43y 用户B:f29a

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


感谢您提供的任何答案或指导

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

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

你能把它压缩到16个字符吗?不,你不能;不,也就是说,如果您希望能够再次解压缩它并恢复原始位。(您已经写过,不需要恢复原始的guid,如果愿意,请跳过下一段。)

GUID本质上是128位的随机序列。根据定义,随机序列不能被压缩。如果一个128位的序列是可压缩的,那么它就不能是随机的,必须有某种算法将压缩后的版本压缩回128位。我知道,由于guid是通过算法生成的,所以它们不是真正随机的。然而,在实践中,几乎没有必要将它们视为真正随机的东西;我当然不认为你应该浪费时间去压缩它们


考虑到可能的GUID的总体数量很大,您可能会对一种方法感到满意,该方法会获取每个GUID的前一半,并从中组装一个伪GUID。根据您的系统可能使用的GUI数量以及您对风险的偏好,这可能会满足您的实际需要。

您是否需要
X
来进行内射?i、 例如,
X(a1,b1)
X(a2,b2)
对于不同的对
(a1,b1)
(a2,b2)
是否可以接受?
X
的结果是否需要与每个输入具有相同的长度(例如,16位),或者可以更长?Hi Mark,所有用户ID都是16位。结果应该是独一无二的,但我不在乎长度。我需要每个用户对有一个不同的GUID,这样tom和phil将生成相同的代码,而不管您将他们的ID输入到公式X的顺序如何,但是没有其他用户对可以生成相同的代码。哇。这么简单,这么简单,我觉得自己很笨。出于好奇,有没有办法把它缩短到16位?把guid的字节异或在一起。结果将与a^b或b^a的顺序无关,并将保持与原始结果相同的长度。