За последние 24 часа нас посетили 18287 программистов и 1632 робота. Сейчас ищут 1588 программистов ...

Алгоритмы генерации уникальных кодов по формату - идеи.

Тема в разделе "Решения, алгоритмы", создана пользователем Psih, 11 авг 2010.

  1. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    у меня два одинаковых гуида было, вероятность тоже, казалось бы, невероятная. 8 миллиардов генераций (точнее строк), и два все таки нашлось :(
     
  2. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    пишем свой уник
    PHP:
    1. <?php
    2. function myuniqid(){
    3.    static $uarr;
    4.    if(!$uarr) $uarr=array();
    5.    do{
    6.      $res=uniqid("",true);
    7.    }while(in_array($res,$uarr));
    8.    $uarr[]=$res;
    9.    return $res;
    10. }
    на подобии можно и uniqid переписать.
    правда память может улететь =)
     
  3. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    хотя в таком варианте тоже есть вероятность совпадения. но в сто миллиардов раз меньше
     
  4. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    хотя вот это
    Код (Text):
    1. #if HAVE_USLEEP && !defined(PHP_WIN32)
    2.    if (!more_entropy) {
    3. #if defined(__CYGWIN__)
    4.       php_error_docref(NULL TSRMLS_CC, E_WARNING, "You must use 'more entropy' under CYGWIN");
    5.       RETURN_FALSE;
    6. #else
    7.       [i][u][b]usleep(1); [/b][/u][/i]
    8. #endif
    9.    }
    не пойму что за условие, но вроде как для этого дела
     
  5. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    Psih
    Тебе придется делать запрос в базу, потому что "код ваучера должен быть случайным". Если ты делаешь код ваучера таким, что не требуется его проверка на дубликат - значит его номер уже не случайный.
    Самое простое - простейшая генерилка "паролей" на 4-6 символов (рандом индекса в массиве с занесенными заранее символами) + текущее время. От этого md5(), обрезать и проверить в базе. Хеш нынче быстр, рандомилка паролей тоже (ну эт как напишешь), время - соль.
     
  6. ideea

    ideea Активный пользователь

    С нами с:
    3 окт 2009
    Сообщения:
    60
    Симпатии:
    0
    Как сделал то в итоге?
    У меня сейчас похожая задача, продажа билетов, надо генерить случайный код на каждую покупку, 5-8 символов максимум, что бы не трудно было читать с листа. :)
     
  7. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ideea
    Если покупки живут недельку - можешь вобще не париться. Ни менеджеры ни покупатели не спутаются.
     
  9. ideea

    ideea Активный пользователь

    С нами с:
    3 окт 2009
    Сообщения:
    60
    Симпатии:
    0
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    планируемое количество сгенерированных id в месяц какое?
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Буквы большие и маленькие - или только одни какие-то?

    Даже если одни какие-то + цифры = 78 364 164 096 комбинаций. Нифига себе! Что еще нужно отцу русской демократии?
     
  12. ideea

    ideea Активный пользователь

    С нами с:
    3 окт 2009
    Сообщения:
    60
    Симпатии:
    0
    Планируемое кол-во - около 5-ти тысяч в месяц, если просто генерить и сравнивать с базой, что будет, когда база будет большая? :)
    Пара решений есть, буду пробовать.
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    воэпервых при таких объемах и 7 знаках можно генерить и НЕ сравнивать уже ни с чем никогда.
    во-вторых - сгенерируте один раз кучищу уников и суньте в файл. читайте из него по чуть-чуть.

    одного миллиона хватит на 10-20 лет, а это файл всего на 7 мегабайт

    не ищите проблемы там где их нет