Как генерировать случайно выглядящие уникальные идентификаторы, которые соответствуют заданному шаблону

у меня есть users table и мне нужно создать уникальный случайный алфавитно-цифровой «id» для каждого пользователя (у них уже есть автоинкрементные идентификаторы, как обычно). Этот идентификатор должен:

  • Быть уникальный
  • Будь случайным взглядом
  • Подходим шаблон AAAA-1234 (4 буквы, 4 цифры)

Есть ли лучший способ, чем сохранять случайно генерируемые строки, пока я не найду тот, которого еще нет в базе данных?

0

Решение

Назначьте каждому пользователю целое число в старом скучном последовательном порядке (или используйте тот другой идентификатор, который вы упомянули). Назови это $x,

Задавать $x = (($x + 2135587861) * 2654435769) & 0xffffffff,

Задавать $x = $x ^ ($x >> 15),

Задавать $x = (($x + 2135587861) * 2654435769) & 0xffffffff снова.

подсчитывать $x % 26 и выберите букву a-z в зависимости от результата. Задавать $x = $x / 26, Повторите четыре раза (я не знаю PHP, поэтому вы получите здесь устные инструкции).

подсчитывать $x % 10 и выберите цифру 0-9 в зависимости от результата. Задавать $x = $x / 10, Повторите четыре раза.

Первые шесть результатов, которые я получаю:

HSQG-2102
DNQO-1176
TEKJ-5435
EHWX-6540
UPPH-0450
MVIX-5036

Это не совсем идеально, но это не очевидно. Возможно, этого достаточно.

Кроме того, он работает только для первых 4 миллиардов (пользователей), прежде чем вы получите коллизии, но это все равно немного далеко от ограничения формата строки.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]