Dice Competitions

How our draws work

How our system allocates ticket numbers and selects automatic draw winners.

Ticket numbers and winning entries are selected at different stages. Here is how our system handles each one, with focused code snapshots and an explanation of the records we keep.

How your ticket numbers are chosen

For competitions with random ticket allocation, our system first builds a list of available ticket numbers. It starts with the competition’s ticket-number range and removes numbers already taken, reserved or held in the current basket. Our system also applies any additional exclusions and availability rules before selecting your numbers.

This is the part of our system that selects the requested ticket numbers:

Code snapshot: random ticket selection

$random_tickets = (array) array_rand(
    array_flip($available_tickets), $qty
);

$qty is the number of tickets being allocated. array_flip() makes the available ticket numbers the array’s keys. PHP’s array_rand() randomly selects the requested number of keys, giving our system the selected ticket numbers.

The result can contain consecutive numbers or widely spaced numbers; random selection does not require an evenly spaced pattern. The numbers may also be displayed in numerical order after selection. Their display order does not determine whether a ticket wins.

You can read PHP’s explanation of array_rand(). The snapshot above shows the selection operation; our system also performs availability checks and reservation steps around it.

When allocation becomes a confirmed entry

Number allocation and payment confirmation are different steps. During checkout, our system can allocate and reserve random numbers while creating your order. A number being reserved does not mean that payment succeeded or that an entry is confirmed.

Your online entries are confirmed after successful payment. Check Your Entries for confirmed ticket numbers. If an order is abandoned or a reservation expires, the earlier selection is not treated as a confirmed entry.

How an automatic winning ticket is chosen

For an automatic draw, our system builds a participant list from the competition’s entry records and applies the relevant eligibility rules. Each eligible ticket entry has a ticket number and an associated entrant. Where enabled for a competition, these rules also check answers and whether instant-winning entries remain eligible for the main draw.

These lines select a position in the eligible list and take the entry at that position:

Code snapshot: automatic winner selection

$winners_key[$i] = mt_rand(0, count($participants) - 1);
$winners[] = $participants[$winners_key[$i]];

count($participants) is the number of entries in the list. PHP array positions start at zero, so a list of 300 entries has positions 0 to 299. mt_rand() selects a position within that range. The entry stored at that position is added to the winners list.

The generated value is a list position, not necessarily the ticket number printed in your account. The selected entry provides the winning ticket number and its associated entrant.

For competitions with more than one winner, our system removes the selected ticket before another selection. If the competition allows only one win per entrant, it removes that entrant’s remaining tickets instead. It then reindexes the remaining list and repeats until the requested winners have been selected or the pool is empty.

What random means in this code

Our system uses PHP’s built-in random functions. In the runtime inspected for our website, array_rand() and mt_rand() use the Mersenne Twister pseudo-random number generator. PHP documents the behaviour of mt_rand() and array_rand().

“Pseudo-random” means software produces the random sequence from an internal state. It is the technical description of these functions, not a claim that numbers are selected manually. The selection functions shown here do not supply or retain a separate seed for each draw. PHP initialises its generator automatically when needed; our audit log does not have access to a historical seed for each result.

These functions are not cryptographic random generators. The code and records document our selection process; they do not, by themselves, constitute independent certification or prove that a whole system is immune to interference.

What we record

Our system keeps a separate private audit log of ticket allocation and draw results. The log observes the existing process without choosing numbers, setting the generator’s seed or changing an entry list.

  • Ticket allocation: the numbers returned during selection, the numbers saved to an order and the matching confirmed-entry records are recorded as separate stages. Order and internal customer references connect these observations where available.
  • Draw results: the competition, winning ticket numbers, selection method and the time the log observed the result.
  • The observed participant list: for supported automatic draws recorded after logging is enabled, the entry rows and their order at the observation point, the entry count and a digital fingerprint.
  • Process evidence: the system version, relevant selection code and digital fingerprints of the inspected code are retained privately for review.
  • Missing or limited evidence: historical results, unlinked selections, unsupported capture paths and logging failures are identified. Large batches may retain count-only evidence, with any omitted number list clearly labelled.

A generated number alone is not treated as a paid entry. Instant-prize matches are recorded separately from main-draw selections, and a reveal animation does not generate a new winning number. Logging starts when the observer is enabled; it does not recreate missing historical selection evidence.

These records remain private because they contain internal participant identifiers. A digital fingerprint helps compare a record or code excerpt with a saved copy; it does not make records immune to changes by someone with full database access. If you have a question about a result, contact Dice with the competition and ticket details.

Live draws and instant wins

Live draws: we use Google’s random number generator during the live broadcast. Our website stores the result recorded by the team. This is an external selection, so the automatic-draw code shown above does not explain how Google generated that result. Watch on the Dice Facebook page and check each competition for its draw details.

Instant wins: prizes are assigned to ticket numbers. Our system randomly allocates available ticket numbers, then checks confirmed entries against those prize numbers. A matching ticket determines the prize; the reveal animation shows that outcome after checkout. Instant wins are separate from main-draw winner selection. Not every ticket wins; cash and site credit are different prize types. Read each game’s prize list and entry details before entering.

About these code snapshots

These focused excerpts show the selection operations used by our system, inspected on 24 September 2026. Only whitespace and line wrapping have been adjusted for readability. The surrounding availability checks, eligibility rules, reservation steps and record keeping are explained on this page rather than reproduced as full code listings.

The snapshots are part of a larger process and are not standalone programs. Our system’s implementation may change with future updates, so this explanation should be reviewed alongside those changes. Detailed technical evidence is retained in our private audit log.

Explore Dice