FAIR DRAW LAB
31,103 tickets. Same weight.
2026-09-18
A famous verse and a verse you have never noticed start under the same rules. Here is the 30-second version of how Bible Gacha keeps the standard draw fair. If you enjoy the nerdy stuff, the technical receipts are farther down.
Picture one enormous draw box
The standard draw uses 31,103 Scripture slots. Think of 31,103 tickets with the same size and weight sitting in one box.
John 3:16 does not secretly get extra copies. A verse missing from your Collection does not get a hidden boost. And an AI does not decide that one verse “fits you today” and change the standard odds.
Bible translations do not always divide verses in exactly the same way, so the app uses shared internal draw IDs. The precise implementation is in “Go deeper” below.
“Why do I keep seeing Psalms?” Is the draw favoring it?
Every individual slot has the same chance, but books contain different numbers of verses. A large book such as Psalms naturally owns more tickets in the box than a tiny book.
That is not book-level weighting. It is what equal odds per verse look like. And it is also why meeting all 66 books is worth celebrating.
The computer dice are the strong kind
When Bible Gacha chooses a Scripture slot, it uses the browser's built-in random-number function intended for security-sensitive work. Math.random() is not used to decide the winning Scripture.
The technical name is crypto.getRandomValues(). The short version: it gives us a much harder-to-predict roll.
If the numbers do not divide evenly, we do not force them
Imagine assigning 10 numbered balls to 3 people by remainder. Somebody ends up with four numbers while the others get three. A microscopic version of that problem can happen if a huge computer number is pushed directly into 31,103 slots.
So when a value lands in the tiny leftover region that cannot be shared evenly, Bible Gacha throws that value away and rolls again.
The technical name is rejection sampling. The bias it avoids is called modulo bias.
The same verse appeared twice. Bug?
No. Random does not mean “perfectly spaced out.” Repeats and clusters are normal. Bible Gacha does not lower the next odds because something appeared recently.
What if loading the verse text fails?
We do not silently replace the winner. The selected Scripture stays selected and the app retries displaying that same result instead.
Theme draws simply use a smaller box
Theme draws intentionally narrow the eligible pool first. Inside that smaller pool, each slot still gets one entry.
What the standard draw does not do
- Secretly boost popular verses
- Favor missing Collection entries to help you complete faster
- Suppress recent results because “you just saw that one”
- Replace a winner because its text failed to load
- Assign SSR/R/N-style value tiers to Scripture
Go deeper — the technical receipts
You can stop here and enjoy the draw. But if you want to see exactly how far we take the fairness checks, everything below is here for you.
What exactly are the 31,103 draw slots?
To normalize verse-boundary differences across translations, Bible Gacha uses shared canonical Scripture IDs as draw units. The current standard pool contains 31,103 unique IDs.
If a translation returns multiple verses as one display segment, that presentation detail does not change the winning odds.
Show me the RNG and bias-avoidance details
The draw uses Web Crypto's crypto.getRandomValues(). Browser implementations use a cryptographically suitable pseudorandom generator initialized from strong platform randomness.
Because 2^32 is not evenly divisible by 31,103, values above the largest evenly mappable range are discarded and redrawn. That is rejection sampling.
We do not describe this as “true random.” We describe it as cryptographically strong random values from Web Crypto.
What are all those SHA-256 values for?
Think of SHA-256 as a fingerprint for the draw pool. Change even one character and the fingerprint changes. Before drawing, the app checks that the pool matches the expected fingerprint and fails closed if it does not.
Standard-pool fingerprint
bc6fbe0c6855f2e1c32f8c7ad171409b22606e24f28ccc5900e8ea3607dd4dea
Theme-pool fingerprints
| Theme | Count | SHA-256 |
|---|---|---|
| First-time readers | 26 | f3178b9c83d79e73750c03e469325ec5cb689936e4d020d359db6e786cc71b53 |
| Anxiety | 27 | 325ef721119f430ea810f208eadc1794d17ab1043ad133194b57028b78a8423a |
| Sadness | 27 | 1303f1124a67a17d812b6ce1a2345f60088e757e1badf6ab6564a1ea704e65b5 |
| Low energy | 24 | 86c3ab3b921f77e00292062cc6fc70b293ed45f7940f128b94777e4a64b11f36 |
Can a huge simulation prove the RNG is fair?
Large statistical tests are useful for finding implementation mistakes, but they cannot by themselves prove that a random-number generator is absolutely suitable. NIST explicitly warns about that limitation.
So Bible Gacha publishes more than “we ran it many times.” We publish the random source, mapping method, eligible pools, and verification fingerprints too.
References
If the algorithm or pools change, this page changes with them.