Алгоритм генератора случайных чисел - PullRequest
0 голосов
/ 24 ноября 2011

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

Предположим, я сохраняю все числа в БД, и если я попробую следующий подход,

  1. Создание случайного числа.
  2. Проверьте, был ли номер уже присвоен.
  3. Если да, перейдите к шагу 1.
  4. Если нет, создайте запись в БД дляновое число и выведите результат.

При увеличении громкости карты будет запрошено большее количество ударов в дБ.

Любые другие варианты?Пожалуйста, помогите.

Ответы [ 3 ]

5 голосов
/ 25 ноября 2011

Существует три основных решения проблемы не повторяющихся случайных чисел:

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

  2. Если вы хотите получить много чисел из небольшого диапазона, установите все числа в массиве и перемешайте массив.Алгоритм Фишера-Йейтса является стандартным для перестановки массивов.Возьмите случайные числа по порядку из перемешанного массива.

  3. Если вы хотите получить много чисел из большого диапазона, используйте алгоритм шифрования подходящего размера.Например, для 64-битных чисел используйте DES и последовательно шифруйте 0, 1, 2, 3, ....Выход гарантированно уникален, потому что шифрование обратимо. Hasty Pudding Cipher может быть установлен для любого удобного диапазона чисел.

0 голосов
/ 24 ноября 2011

Люк, здесь есть смысл. Номера кредитных карт не случайны, они просто числа, действительные по алгоритму Luhn . Номер на карте (код безопасности с 3 или 4 цифрами) должен быть случайным числом.

0 голосов
/ 24 ноября 2011

Что вы требуете? Я думаю, вам нужно сгенерировать уникальное случайное число.

Шаг 2 в вашем случае может занять много времени в зависимости от количества записей.

для получения хорошего псевдослучайного числа с использованием любого из алгоритмов хеширования, таких как SHA1 или MD5

Здесь также существует редкая возможность того, что две записи могут иметь одно и то же случайное число

Чтобы сделать его абсолютно уникальным, вы можете объединить случайное число с уникальным идентификатором записи.

например. у вас есть 100 записей с уникальными идентификаторами от 1 до 100. Чтобы получить уникальное случайное число для 100-й записи, сгенерируйте случайное число, скажем, 1129642347, и объедините его с уникальным идентификатором 100. В качестве простого метода вы можете использовать конкатенацию. Тогда случайное число становится 1129642347100

...