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.
| Site | Item pool | Fairness page | Engine |
|---|---|---|---|
| Clash.gg | CS2 skins | Its own | seedrandom 3.0.5 |
| RustClash | Rust skins | Redirects to Clash.gg | Identical |
| DotaClash | Dota 2 items | Redirects to Clash.gg | Identical |
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.
| Mode | Seed string | Where the shared input comes from |
|---|---|---|
| Case opening | serverSeed:clientSeed:round | Clash.gg's committed server seed |
| Battle | battleSeed:round+1:slot | Random.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.