Как заставить генератор случайных строк отфильтровывать дублирующиеся строки? - PullRequest
0 голосов
/ 27 февраля 2012

Я создал генератор строк:

    <?php

function createRandomPassword() {
    $chars = "abcdefghijkmnopqrstuvwxyz023456789";
    srand((double)microtime()*1000000);
    $i = 0;
    $pass = '' ;
    while ($i <= 12) {
        $num = rand() % 33;
        $tmp = substr($chars, $num, 1);
        $pass = $pass . $tmp;
        $i++;
    }
    return $pass;
}


// Usage
$product_names = array ();
for ($i=0; $i < 100; $i++ )
$product_names[] = "code-" . createRandomPassword();
?>

Моя проблема в том, что я думаю, что есть вероятность, что это может дублировать значения, и это очень важно, чтобы этого не произошло, поскольку я буду генерировать около 700 000 из них,

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

Спасибо :)

Ответы [ 3 ]

1 голос
/ 27 февраля 2012

В следующем примере будет сгенерировано 100 наименований товаров, удалены дубликаты и новые наименования товаров, пока в массиве наименований товаров не будет 100.

$cnt = 0;
$product_names = array ();
while($cnt < 100) {
   for ($i=0; $i < 100 - $cnt; $i++ )
     $product_names[] = "code-" . createRandomPassword();
   $product_names = array_unique($product_names);
   $cnt = count($product_names);
}

Вы можете поместить число 100 в переменную или константу и обменять его на 700 000.

0 голосов
/ 27 февраля 2012

Создайте таблицу поиска / проверки (в базе данных или файле) или создайте алгоритм, который создает лучший уникальный ключ (используя md5 или sha или что-то, что разработано, чтобы быть уникальным).

0 голосов
/ 27 февраля 2012

Несколько вариантов:

  1. Создание 700000 уникальных строк и их перемешивание.
  2. Использование GUID

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

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