Как сгенерировать 4-значный код проверки в соответствии с информацией о широте и долготе? - PullRequest
1 голос
/ 29 апреля 2019

Моему приложению нужна эта функция:

  1. Пользователь А может загрузить информацию о своем местоположении и получить ДОБАВИТЬ КОД, который сгенерировано на сервере.
  2. Пользователь B может ввести ADD CODE, а также должен загрузить свое местоположение Информация. Только когда userA и userB достаточно близко и ДОБАВИТЬ КОД могут ли они наконец стать друзьями.
  3. Прежде чем рассчитать расстояние и сравнить ADD CODE, я проверю является ли их номер города (уникальным для каждого города) одинаковым. В других слова, я должен убедиться, что в каждом городе, ADD CODE не будет конфликтовать с другим одновременно (или несколькими минутами).

    Конечно, четырехзначное число не удовлетворяет всем возможностям, но есть ли способ сгенерировать это четырехзначное число, чтобы максимально удовлетворить эту функцию?

Ответы [ 2 ]

0 голосов
/ 29 апреля 2019

Предполагается, что эта последовательность происходит в течение ограниченного периода времени (и не то, что код Add действителен для всех времен):

Ваш 4-значный номер не должен быть уникальным во всем мире, он толькодолжен быть уникальным в этом окне времени.Итак, с этим наблюдением ведите таблицу кодов Add, когда они были выпущены и для какого местоположения.Генерируйте их случайным образом, убедившись, что их нет в таблице.Периодически удаляйте все добавленные коды с истекшим сроком действия.

При условии, что у вас никогда не будет более 10 000 пользователей одновременно, пытающихся соединиться друг с другом, это будет работать.

Если вам нужно больше, подумайте о разрешении дублирования втаблицу, но с использованием широты / долготы, чтобы гарантировать, что один и тот же код добавления никогда не будет назначен ни одной точке в пределах 2х максимального расстояния, допустимого для спаривания.

0 голосов
/ 29 апреля 2019

Есть ли способ сгенерировать это 4-значное число, чтобы максимально удовлетворить эту функцию?

Да. Вероятно, существуют миллионы возможных способов создания четырехзначного числа (где почти все они ужасны и не удовлетворяют большинству требований); и если вы отсортируете их по степени их удовлетворения, то один из них должен максимально удовлетворить эту особенность.

Реальный вопрос в том, насколько ужасным и неудовлетворительным было бы "насколько это возможно"?

Если вы принимаете 4 десятичных знака; тогда вы ограничены 10000 местоположениями или 10000 уникальными пользователями. Этого вряд ли хватит на все хорошее.

Если вы принимаете 4 шестнадцатеричные цифры; тогда вы ограничены 65536 местоположениями или 65536 уникальными пользователями. Это лучше, но все еще недостаточно.

Итак ... что если вы использовали "base 1234567"? В этом случае 4-значный номер имеет 2323050529221952581345121 перестановок. Поверхность Земли составляет около 510,1 миллиона квадратных километров, поэтому этого будет достаточно для очень точного кодирования местоположения (вероятно, в пределах нескольких метров?).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...