如何根据纬度和经度信息生成4位验证码?

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

我的应用程序需要此功能:

  1. 用户A可以上传他的位置信息并获取在服务器上生成的ADD CODE。
  2. 用户B可以输入ADD CODE,还必须上传他的位置信息。只有当userA和userB足够接近且ADD CODE匹配时,他们才能成为朋友。
  3. 在计算距离和比较ADD CODE之前,我将检查他们的城市编号(每个城市的唯一编号)是否相同。换句话说,我必须确保在每个城市,ADD CODE不会同时(或几分钟)与另一个城市发生冲突。 当然,4位数字不能满足所有可能性,但有没有办法生成这个4位数字以尽可能满足这个功能?
algorithm hash
2个回答
0
投票

假设这个序列在有限的时间内发生(而不是Add代码一直有效):

您的4位数字不一定是全球唯一的,它只需要在这个时间窗口内是唯一的。因此,根据这一观察结果,维护一个添加代码表,发布它们的位置和位置。随机生成它们,确保它们不在表中。定期删除任何已过期的添加代码。

如果您没有超过10,000个用户同时尝试相互连接,这将起作用。

如果您需要更多,请考虑允许表格中的重复项,但使用lat / long确保相同的添加代码永远不会分配到2x内允许配对的最大距离内的任何点。


0
投票

有没有办法生成这个4位数字,以尽可能满足这个功能?

是。可能有数百万种可能的方法来生成一个4位数的数字(其中几乎所有数字都很糟糕并且不满足大多数要求);如果按照它们满足的程度对它们进行排序,那么其中一个必须尽可能地满足该特征。

真正的问题是,“尽可能多”是多么糟糕和不满意?

如果你假设4位小数;那么你只限制10000个地点或10000个独特用户。这对任何好事都不太可能。

如果你假设4个十六进制数字;那么你只限于65536个位置或65536个唯一身份用户。那更好但仍然不够。

那么..如果你使用“base 1234567”怎么办?在这种情况下,4位数字具有2323050529221952581345121排列。地球表面约为5.110亿平方公里,所以这足以非常精确地编码一个位置(可能在几米之内?)。

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