如何基于数字数组创建唯一的ID,使不同数字的各种组合的值不相同


How do I create a unique ID based on an array of numbers so that the value of various combination of different numbers are not the same?

在数组中有一个名为users_id的列表

array(1,2,3,4...25)

如果我将7和3组合,生成的值不能与6和4相同。但是,如果我将3和7组合,则组合值与7和3相同,这是可以接受的。

所以加法不能用,因为7,3和6,4的组合仍然会产生相同的值,10。乘法也不能用,因为5 × 2等于1 × 10。不同号码的组合也适用于1个或2个以上号码直到25个。

换句话说,两个不同的数字组合不能产生相同的组合值当且仅当所使用的数字不是相同的

我的目标是基于users_id数组生成唯一的conversations_id,以便应用程序可以判断相同类型的用户之间是否已经存在会话

最简单的解决方案可能是基于排序的数组的散列:

sort($userIds);
$conversationId = sha1(json_encode($userIds));

json_encode只是一种任意的序列化格式,用于将数组转换为可以散列的字符串。您也可以join(',') it或serialize it或做任何其他将返回一个有效的,明确的字符串表示。