За последние 24 часа нас посетили 18044 программиста и 1654 робота. Сейчас ищут 1458 программистов ...

Механизмы организации лотереи

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

  1. battrack

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

    С нами с:
    17 фев 2009
    Сообщения:
    16
    Симпатии:
    0
    Такая вот задачка стоит:
    необходимо организовать что-то типа лотереи в интернет-магазине.
    Есть интернет-магазин (htc-online.ru), который уже функционирует, имеет посещаемость и заказы. Идея такова: каждый месяц будет проводиться розыгрыш подарков по номерам заказов.
    Т.е. есть заказы и из них будут каким-то образом выбираться победители. И вот стоит такой вопрос: как сделать розыгрыш чтобы он у людей вызывал максимальное
    доверие. Уточню, что розыгрыш действительно будет (это никакая не разводка). Магазин уже с именем и мы действительно будем случайным образом
    определять победителя и дарить ему подарок. Сначала думал просто тупо рэндомом выбрать номера заказов - победетелей.
    Но потом стал думать, что нужно чтобы розыгрыш был прозрачным для клиентов. т.е. как бы это правильно сказать, сделать какой-то механизм на сайте, чтобы
    пользователи сами могли влиять на розыгрыш, т.е. своими действиями повлиять на результат и этим самым убедиться, что победитель определился не просто
    программой (которую "недобросовестные" владельцы сайта могут запрогроммировать как угодно и выбрать того победителя, который им нужен), а именно действительно
    победитель был выявлен случайно. Или же не обязательно, чтобы пользовтель влиял как-то влиял на исход розыгрыша, но самое главное, чтобы ему было видно, что
    розыгрыш ДЕЙСТВИТЕЛЬНО случаен и без всякого подлога!
    В общем, короче, говоря, может кто-то когда-то встречался с такой задачей и знает или может быть есть идеи, как можно организовать розыгрыш призов на сайте,
    чтобы для пользователей это было максимально прозрачно (как то, что ведущий лезет в мешочек с бочонками, т.е. когда трудно обмануть).

    Заранее спасибо!
     
  2. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    раздавать заранее каждому номер и разыгрывать по частям каждую цифру
     
  3. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    А зачем что-то программировать, если достаточно просто об этом объявить и пару записей поменять?
    Ясно дело, когда администрация подставляет, другое дело, когда клиент пишет какого-то бота и накручивает там рейтинг (ДОПУТИМ), чтобы приз получить.
    Победителя выбирать следует так: человек региструруется в лотерее, но может регистрироваться он там только в том случае, если совершил одну-две покупки, иначе понарегаются всякие школьники, много аккаунтов на одного человека для увеличения шансов.
     
  4. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    показывать призы, победителей на всеобщее обозрение.
     
  5. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Чем больше покупок - тем больше шанс выиграть.

    SELECT * FROM user_buy ORDER BY RAND() LIMIT 1;
     
  6. Вльдемар

    Вльдемар Активный пользователь

    С нами с:
    20 май 2006
    Сообщения:
    635
    Симпатии:
    0
    Адрес:
    Белхород
    Повесить на крон 1-го числа каждого месяца на 00:00
    [sql]INSERT INTO win (id_user) SELECT id FROM users ORDER BY RAND() LIMIT 1[/sql]
     
  7. battrack

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

    С нами с:
    17 фев 2009
    Сообщения:
    16
    Симпатии:
    0
    а я вот такой вот вариат вижу:

    в день розыгрыша нужно получить какое-то случайное число. Ну например такими манипуляциями: сумма всех номеров заказов умножается на количество заказов и умножается на курс доллара в этот день и прибавляется сумма всех цифр курса евро (это щас отблады формулу сочинил). А затем мы делим это полученное число на количество заказов (например N). Берем остаток от деления, который обязательно будет лежать в интервале от 0 до N. Это и будет номер победитель!

    Что насчет этого скажете? Тут уж точно исключена подтасовка. Тем более что форумла расчета будет выведена заранее. Т.е. люди будут знать формулу, но никто же не будет знать какой в этот день будет курс доллара или евро (ну или другие какие-нибудь параметры, независящие от администрации сайта). Согласен, что в таком варианте тоже можно брешь найти, например если подогнать кол-во заказов под нужную величину, но это уже сложнее.

    А можно и вовсе взять хеш-функцию (md5 например) скажем от суммы всех заказов. Тут уж точно случайность обеспечена. Правда объясни обывателю что такое хеш.... )))
     
  8. battrack

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

    С нами с:
    17 фев 2009
    Сообщения:
    16
    Симпатии:
    0
    а я вот такой вот вариат вижу:

    в день розыгрыша нужно получить какое-то случайное число. Ну например такими манипуляциями: сумма всех номеров заказов умножается на количество заказов и умножается на курс доллара в этот день и прибавляется сумма всех цифр курса евро (это щас отблады формулу сочинил). А затем мы делим это полученное число на количество заказов (например N). Берем остаток от деления, который обязательно будет лежать в интервале от 0 до N. Это и будет номер победитель!

    Что насчет этого скажете? Тут уж точно исключена подтасовка. Тем более что форумла расчета будет выведена заранее. Т.е. люди будут знать формулу, но никто же не будет знать какой в этот день будет курс доллара или евро (ну или другие какие-нибудь параметры, независящие от администрации сайта). Согласен, что в таком варианте тоже можно брешь найти, например если подогнать кол-во заказов под нужную величину, но это уже сложнее.

    А можно и вовсе взять хеш-функцию (md5 например) скажем от суммы всех заказов. Тут уж точно случайность обеспечена. Правда объясни обывателю что такое хеш.... )))
     
  9. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Объявлять заранее номера-победители. Это должны быть номера заказов, которых еще небыло. Учитывая, что номера выдаются последовательно, у вас случится настоящий бум заказов, если разница между номером последнего заказа и номерами-победителями будет небольшой. Типа как "миллионный покупатель".