Генерирование уникальных кодов в PHP/MySQL?

Это не критично, если вы установите num_classes выше, чем фактическое количество классов (это только увеличивает некоторые тензоры / переменные), но важно, если вы установите его ниже. первый случай не должен влиять на производительность модели.

14
задан VirtuosiMedia 20 October 2008 в 18:58
поделиться

5 ответов

При необходимости приблизительно в 10 миллионах уникальных ключей (например), лучший подход должен выбрать ключевое пространство, это экспоненциально больше, и начните случайным образом генерировать. Читайте о День рождения Paradox - это - главное, по поводу которого Вы должны быть взволнованы. Если Вы хотите 2^n уникальные и безопасные ключи, удостоверьтесь, что существует, по крайней мере, 2^ (2 * n) возможные значения. Вот грубый O (n, регистрируют n), алгоритм:

  • Используют ключевое пространство, по крайней мере, 2^50 (таким образом, другими словами, позвольте 2^50 возможные уникальные значения), и у Вас будут едва любые коллизии в Вашем всем наборе данных - и любой, кого скот, вызывающий Ваши ключи, будет иметь даже о разногласиях получения ключа, если они попробуют 2^25 их.
  • генерируют столько случайных чисел, сколько Вам нужно
  • , индексируют базу данных по Вашему ключу (это - O (n LG n) шаг: вид)
  • пролистывают DB и выполняют итерации по всему набору данных для обрезки дубликатов (псевдокод ниже)
  • Удаляют дублирующиеся строки, и Вы сделаны.

Псевдокод:

$last = null;
while ($current = getnext()) {
    if ($last == $current) {
        push($toDelete, $current);
    }
    $last = $current;
}
13
ответ дан 1 December 2019 в 13:48
поделиться

Метод Whatver, который Вы используете, я предложил бы, чтобы Вы добавили контрольный разряд или два как защита "первой строки" против людей, неправильных входящих или пытающихся изобрести число.

0
ответ дан 1 December 2019 в 13:48
поделиться

Давайте предположим, что можно использовать набор символов, скажем, 40 символов однозначных верхних, более низких и цифровых символов.

Для последовательности n символов, Вы имеете 40 <глоток> n комбинации

  • 40 <глоток> 4 = 2,560,000
  • 40 <глоток> 5 = 102,400,000
  • 40 <глоток> 6 = 4,096,000,000
  • 40 <глоток> 7 = 163,840,000,000
  • 40 <глоток> 8 = 6,553,600,000,000

Таким образом, 8 символов дают довольно хорошее пространство для работы в - если бы Вы сгенерировали 10 миллионов кодов, то необходимо было бы попробовать сотни тысяч комбинаций к грубой силе код.

Или Вы приезжаете в от другого направления - дают количество возможный коды, сколько коды должны Вы генерировать для предотвращения прерывания, которое они называют День рождения Paradox ?

Взятие 8 символьных кодов, 6,553,600,000,000 является приблизительно 2 <глоток> 42 , таким образом Вы могли бы обоснованно генерировать 2 <глоток> 21 коды от него, или 2,097,152

7
ответ дан 1 December 2019 в 13:48
поделиться

Использовать алгоритм одноразового пароля?

RFC4225 детализирует один на основе алгоритма HMAC.

http://www.ietf.org/rfc/rfc4226.txt

, но вместо того, чтобы использовать 0-9 цифр base10 кодирование, используйте base32.

0
ответ дан 1 December 2019 в 13:48
поделиться

Как ни странно, с помощью следующего семени я смог сгенерировать только 32 уникальных строки.

ABCDEFGHJKLMNPQRSTUVWXYZ23456789

С более длинным семенем я смог сгенерировать намного больше - сгенерировал 40 000 уникальных строк. строки успешно.

ABCDEFGHJKLMNPQRSTUVWXYZ234567892345678923456789ABCDEFGHJKLMNPQRSTUVWXYZ234567892345678923456789ABCDEFGHJKLMNPQR923456789ABCDEFGHJKLMNPQ55Z92345678X8X8X8

-3
ответ дан 1 December 2019 в 13:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: