Skip to content
CheckMyPull

Verify your Clash.gg roll

Verified: reproduces real results

Clash.gg seeds a random number generator rather than slicing a hash. Its published example gives ticket 18,875, which we reproduce with seedrandom 3.0.5.

Live verifier
0 network requests

Step 1Where did you play?

Using Clash.gg / RustClash case opening: seedrandom v3.0.5 PRNG over serverSeed:clientSeed:rounddetails

The server seed, your client seed and the case index (1-based within a multi-case open) join with colons and seed the seedrandom v3.0.5 PRNG. The first float in [0, 1) times 100,000, floored, is the ticket (0-99,999). Each 1% of an item's odds spans 1,000 tickets. The server-seed commitment is a plain SHA-256.

Where to find your numbers on Clash.gg:

  1. The Fairness page (clash.gg/fairness) shows your Server Hash and an editable Client Seed; a toggle can rotate the client seed automatically after each bet.
  2. Per-bet server seeds and nonces for case openings appear in your account after the seed rotates (login required).
  3. For battles, open the battle's details and copy its Random.org seed. Rounds and player slots count from 1.

Source: Clash.gg's own fairness page

Step 2Paste your numbers

Runs entirely on your device via your browser's built-in cryptography. Don't take our word for it: open DevTools → Network, click the button, and watch: zero requests.

Where to find your seeds on Clash.gg

  1. 1

    The Fairness page (clash.gg/fairness) shows your Server Hash and an editable Client Seed; a toggle can rotate the client seed automatically after each bet.

  2. 2

    Per-bet server seeds and nonces for case openings appear in your account after the seed rotates (login required).

  3. 3

    For battles, open the battle's details and copy its Random.org seed. Rounds and player slots count from 1.

Clash.gg is not a hash-slice system

Almost every platform on this site works the same way underneath: hash some seeds, take a slice of the digest, convert it to a number. Clash.gg does something different, and it is the single most important thing to understand before trying to check a result.

Clash.gg seeds a pseudo-random number generator with your seeds and reads the first number it produces.

seedrandom( "serverSeed:clientSeed:round" )      seedrandom v3.0.5, colons
        |
        v
  the generator's first output, a value between 0 and 1
        |
        v
  ( value x 100,000 ) rounded down  =  ticket, 0 to 99,999

The consequence is unusual. With a hash-based system, anyone who knows the algorithm can reimplement it from scratch in any language, because SHA-256 is SHA-256 everywhere. With a seeded generator, the result depends on the precise internal behaviour of one specific piece of software. Reproduce it with a different generator, or even a different version of the same generator, and you get a different number that is no less "random" and completely wrong.

Clash.gg uses seedrandom version 3.0.5. Our implementation reproduces its published example exactly: the seeds clash-server-seed and clash-client-seed at round 1 give ticket 18,875.

Why the version number matters

It is worth being blunt about this, because it is a genuine structural difference between Clash.gg and a hash-based platform.

A hash-based algorithm is self-describing. Publish the formula and anyone can implement it correctly from the specification alone. A generator-based algorithm is not: the specification is the library's source code, and "we use seedrandom" is only a complete description if you also pin the version.

This is not a criticism of Clash.gg's fairness. The commitment still works, the seeds are still published, the result is still checkable. It does mean the check has a dependency that a hash-based check does not, and that a verifier which quietly upgrades its library could start producing wrong answers without anything visibly breaking. We pin the version deliberately.

Battles use Random.org

For case battles the shared input cannot come from any single player. Clash.gg draws it from Random.org, a third-party service that produces randomness from atmospheric noise.

seedrandom( "battleSeed:round+1:slot" )
        |
        v
  ( value x 100,000 ) rounded down  =  ticket for that slot in that round

The battle's Random.org seed takes the place of the server seed, the round number is offset by one, and the slot identifies which position in the battle the ticket belongs to. Ties are broken with a fresh draw from the bare battle seed.

Cross-checked against Clash.gg's own hosted verifier, all thirteen published values reproduce, including the tie-break value, so both modes on this page are confirmed rather than assumed.

Tickets and items

A ticket is a number from 0 to 99,999, which makes the arithmetic unusually easy to follow. Each item holds a contiguous block of tickets sized to its stated chance, so an item listed at 1% holds exactly 1,000 of them and an item at 0.1% holds 100.

Reproducing the ticket proves the number was fixed before you opened. Checking which published block it falls in proves that number corresponds to the item you actually received.

Sister sites share this engine

Clash.gg is not the only site running this code. RustClash and DotaClash use the same engine against different item pools, and RustClash's fairness page redirects to Clash.gg's.

SiteItem poolFairness pageEngine
Clash.ggCS2 skinsIts ownseedrandom 3.0.5
RustClashRust skinsRedirects to Clash.ggIdentical
DotaClashDota 2 itemsRedirects to Clash.ggIdentical

If you have verified a result on one, the same method works on the others unchanged. The seeds sit in the same places and the ticket range is the same 0 to 99,999 on all three.

The two modes, side by side

The engine is shared but the seed string differs by mode, and using the wrong one is the most common reason a Clash check disagrees.

ModeSeed stringWhere the shared input comes from
Case openingserverSeed:clientSeed:roundClash.gg's committed server seed
BattlebattleSeed:round+1:slotRandom.org

What a passing check settles

A match proves the round you are checking came from values committed before you played, and that Clash.gg did not alter it afterwards.

It proves nothing about anything else: not whether a withdrawal completes, not how support responds, not what any case is worth. Those are separate questions with separate evidence, and we keep what verification cannot prove as a standing page precisely because the distinction gets blurred so often.

What we can check on Clash.gg

Per-game status. "Verified" means our implementation reproduced a real, documented result for that game. We never list a game on trust.

GameAlgorithmStatus
Case openingseedrandom v3.0.5 PRNGVerified

Reproduces Clash's own case verifier (CodePen mjchal/PoOKmZz, embedded on clash.gg/fairness, captured 2026-07-22): seedrandom(serverSeed:clientSeed:round) x 100,000, ticket 0-99,999. Corrected 2026-07-22 from a wrong HMAC engine (the '90,455,280' example was CSGORoll's, cross-contaminated).

Battle roundseedrandom v3.0.5 PRNGVerified

Cross-checked against Clash's own hosted battle verifier, 2026-07-14 (13 of 13 sampled outputs reproduced).

Battles are driven by a Random.org seed requested after all players join, not by your account seeds.

Common questions

Is Clash.gg provably fair?

Yes, and both case opening and battle rounds are confirmed here against Clash.gg's own published code. Its published example, seeds clash-server-seed and clash-client-seed at round 1, produces ticket 18,875, which our implementation reproduces exactly.

How does Clash.gg's algorithm work?

Unlike most platforms it does not slice a hash. It seeds a JavaScript pseudo-random number generator with the server seed, client seed and round joined by colons, takes the generator's first output between 0 and 1, multiplies by 100,000 and rounds down to a ticket from 0 to 99,999.

Why does the seedrandom version matter for Clash.gg?

Because a seeded generator is defined by its implementation rather than by a published formula. A hash is identical everywhere, but a different generator, or a different version of the same one, produces different numbers that are equally random and completely wrong. Clash.gg uses seedrandom 3.0.5.

How are Clash.gg battles verified?

Battles take their shared seed from Random.org rather than from any player, since no single player should decide a shared outcome. The generator is seeded with that battle seed, the round offset by one, and the slot. Ties are broken with a fresh draw from the bare battle seed.

Do RustClash and DotaClash use the same system?

Yes. All three run the same engine against different item pools, and RustClash's fairness page redirects to Clash.gg's. If you have verified a result on one of them, the same method works unchanged on the others.

What ticket range does Clash.gg use?

A ticket runs from 0 to 99,999, which makes the arithmetic unusually easy to follow. Each item holds a contiguous block sized to its stated chance, so an item listed at 1% holds exactly 1,000 tickets and one at 0.1% holds 100. Our implementation reproduces its published ticket 18,875.

Sources

Algorithm details on this page are checked against Clash.gg's own published material before publication, and our implementation is confirmed against a real result before a game is marked verified.

The honest fine print

A passing check proves a specific outcome came from numbers fixed before you played. It does not prove Clash.gg will honour a withdrawal, or say anything about the site beyond this one result. Fair math and a trustworthy business are different things: how we verify and what it means.

More tools: compare every platform's algorithm · batch-verify a nonce range · check your luck vs the odds · all platforms

The verifier never sends your data anywhere. Analytics cookies are separate and let us see aggregate traffic. Nothing loads unless you allow it. See our Privacy Policy.