OPDUEL

Fairness

OPDuel Originals

Limbo

Plinko

Keno

Roulette

Mines

Blackjack

Roll

Dice

Provably Fair Blackjack

Blackjack uses an infinite deck where each card is drawn independently. Every draw has the same probability since the deck never depletes. The game generates all cards needed for the hand before play begins.

Verify Game Fairness

Deal Order

Cards are dealt one by one in this order: player, dealer, player, dealer. Any additional cards (hits, doubles, dealer draws) continue sequentially from the same generated list.

Game Rules

  • Card values: Number cards are face value, face cards (J, Q, K) are worth 10, Aces are 1 or 11
  • Dealer rules: Hits on 16 or less, stands on soft 17
  • Doubling: Allowed on any first two cards, and after a split
  • Splitting: You can only split once. You cannot hit on split aces
  • Insurance: Available when dealer shows an Ace, costs half your bet, pays 2:1
  • Natural blackjack push: If both you and the dealer have blackjack, the result is a push
  • Dealer blackjack: If the dealer has natural blackjack, the hand ends immediately
  • Side bets: Perfect Pairs and 21+3 are settled from the first 3 dealt cards (your two cards + dealer’s upcard)

The Algorithm

// Step 1: Generate card draws using HMAC-SHA256 RNG
const { getRandom } = createRandomGenerator(serverSeed, clientSeed, nonce);

// Step 2: Each card is drawn independently from a 52-card deck
const cardIndex = getRandom(52); // floor(float * 52)
const card = CARDS[cardIndex];

// Card deck (suits grouped per rank)
const CARDS = [
  '♦2', '♥2', '♠2', '♣2',
  '♦3', '♥3', '♠3', '♣3',
  '♦4', '♥4', '♠4', '♣4',
  '♦5', '♥5', '♠5', '♣5',
  '♦6', '♥6', '♠6', '♣6',
  '♦7', '♥7', '♠7', '♣7',
  '♦8', '♥8', '♠8', '♣8',
  '♦9', '♥9', '♠9', '♣9',
  '♦10', '♥10', '♠10', '♣10',
  '♦J', '♥J', '♠J', '♣J',
  '♦Q', '♥Q', '♠Q', '♣Q',
  '♦K', '♥K', '♠K', '♣K',
  '♦A', '♥A', '♠A', '♣A',
];

How It Works

  1. Generate floats - Using the same HMAC-SHA256 method as other OPDuel Originals, random floats between 0 and 1 are generated for each card needed
  2. Convert to index - Each float is multiplied by 52 and floored to produce an integer from 0-51
  3. Map to card - The index corresponds to a card in the deck array. Cards are dealt sequentially as the hand progresses: player, dealer, player, dealer, then any hits or dealer draws

Since the deck is infinite, the same card can appear multiple times in a hand.

Card Index Reference

IndexCardIndexCardIndexCardIndexCard
02166321048A
12176331049A
22186341050A
32196351051A
4320736J
5321737J
6322738J
7323739J
8424840Q
9425841Q
10426842Q
11427843Q
12528944K
13529945K
14530946K
15531947K

Example

Given these inputs:

  • Server Seed: c5e7146c5863d7d647c93ffe7d4ec13fffbb7311108fab0c067d97bcc2b32d55
  • Client Seed: LuckyClientSeed777
  • Nonce: 0

The floats generated: [0.25783150, 0.09994979, 0.81939594, 0.69399282, 0.54038320, ...]

Card 1 (Player):  floor(0.25783150 × 52) = floor(13.41) = 13 → ♥5
Card 2 (Dealer):  floor(0.09994979 × 52) = floor(5.20) = 5 → ♥3
Card 3 (Player):  floor(0.81939594 × 52) = floor(42.61) = 42 → ♠Q
Card 4 (Dealer):  floor(0.69399282 × 52) = floor(36.09) = 36 → ♦J
Card 5 (Next):    floor(0.54038320 × 52) = floor(28.10) = 28 → ♦9

Player hand: ♥5, ♠Q (15) | Dealer hand: ♥3, ♦J (13) | Next card: ♦9 (hit, double, or dealer draw)

Verify your bets by selecting the “My Bets” tab at the bottom of the page while playing, then click on the bet you want to verify. For older bets, find them in your Bet History.

    CashierHomeGamesChat





    OPDUEL