Cum funcționează și întrebări frecvente
Cum transformă generatorul un nume în numere?
Textul este curățat (litere mici, spații simple), etichetat cu jocul și, opțional, data extragerii, apoi trecut prin SHA-256. Hash-ul este extins într-un șir de numere pe 32 de biți, transformate în bile prin eșantionare cu respingere și un amestec Fisher–Yates, exact ca la extragerea dintr-o urnă.
- Curățăm textul. Literele devin mici, spațiile de la capete dispar și spațiile multiple devin unul singur, deci
Maria Popescușimaria popescusunt același text. Diacriticele și punctuația rămân. - Îl etichetăm. Textul se combină cu versiunea algoritmului, jocul și (opțional) data extragerii:
atypicalquant-lotto-v1|la-primitiva||maria popescu. Pentru că jocul face parte din mesaj, același nume dă variante fără legătură între ele la La Primitiva și la orice alt joc. - Îl trecem prin SHA-256. SHA-256 este funcția hash folosită de Bitcoin și de certificatele HTTPS. Transformă mesajul într-o „amprentă” de 256 de biți (seed-ul) care arată ca 32 de octeți aleatori. Schimbi o singură literă și cam jumătate din biți se schimbă.
- Lungim seed-ul. O singură amprentă nu ajunge mereu, așa că o extindem într-un șir: SHA-256(seed ‖ 0), SHA-256(seed ‖ 1), … Fiecare bloc se taie în opt numere pe 32 de biți, între 0 și 4.294.967.295.
- Transformăm numerele în bile, corect. Ca să alegi una din 49 bile, varianta evidentă e „număr mod 49”, dar 2³² nu se împarte exact la 49: rămâne un rest de 39, așa că primele 39 poziții ar avea câte o șansă în plus. Soluția este eșantionarea prin respingere: cele mai mari 39 valori se aruncă și se folosește numărul următor. Asta se întâmplă cam o dată la 110.127.367 extrageri și face alegerea perfect uniformă.
- Extragem fără întoarcere. Bilele se trag cu un amestec Fisher–Yates, varianta pe calculator a urnei: alegi o bilă din cele 49 rămase, o pui deoparte, alegi din cele 48 rămase și tot așa până se umple varianta. Bilele bonus (Joker, Lucky Stars, Powerball…) vin din urna lor separată, din același șir de numere.
Același nume dă mereu aceleași numere?
Da. Numerele se calculează din text cu SHA-256, deci același text și același joc dau mereu aceeași variantă, pe orice dispozitiv. Majusculele și spațiile în plus nu contează; diacriticele și punctuația contează.
| Text scris | Seed (primii octeți) | Varianta La Primitiva |
|---|---|---|
"Maria Popescu" | 97ce7c7aee3e8e2f… | 7 18 19 24 35 39 + 5 |
" maria popescu " | 97ce7c7aee3e8e2f… | 7 18 19 24 35 39 + 5 ← la fel ca rândul 1 |
"Maria Popescu." | 5d10d55a3be21ff5… | 2 7 9 22 33 42 + 3 |
"Măria Popescu" | a66d159b051a5391… | 4 10 13 26 46 49 + 1 |
"Maria Popescu" + data 2026-12-31 | 5460ed0479dbd98f… | 1 7 21 31 32 47 + 7 |
De ce toate combinațiile au aceeași șansă?
Rezultatul SHA-256 se comportă ca niște numere perfect aleatoare, eșantionarea cu respingere face ca fiecare bilă să fie aleasă perfect uniform, iar amestecul Fisher–Yates transformă alegerile uniforme în variante uniforme. Împreună, fiecare dintre cele 139.838.160 variante La Primitiva posibile are aceeași șansă.
- Rezultatul SHA-256 nu se poate deosebi de unul aleator. Nimeni n-a găsit vreodată o metodă de a-i prezice vreo parte sau de a găsi două texte cu același hash. Pentru o variantă loto asta înseamnă că seed-urile unor nume diferite se comportă ca numere de 256 de biți independente și perfect aleatoare.
- Eșantionarea prin respingere e exactă. După ce aruncăm valorile în plus, fiecăreia dintre cele 49 poziții îi corespund exact la fel de multe valori pe 32 de biți, deci fiecare e aleasă cu probabilitatea exactă 1/49. Fără rotunjiri, fără nici cea mai mică deviație.
- Fisher–Yates e exact. Cu alegeri perfect uniforme la fiecare pas, fiecare secvență ordonată de bile are probabilitatea 1/(49·48·…), deci fiecare dintre cele 139.838.160 variante posibile e la fel de probabilă.
Pe scurt: pe toate numele pe care le scriu oamenii, variantele se împrăștie perfect uniform peste tot spațiul 6/49 + 0–9, exact ca într-o urnă reală.
Pot verifica dacă numerele sunt cu adevărat uniforme?
Da. Testul de mai jos generează variante pentru 20.000 de nume inventate („test-1”, „test-2”, …) și numără de câte ori iese fiecare bilă. Dacă metoda e corectă, fiecare bară stă aproape de linia punctată „așteptat”, iar un test chi-pătrat confirmă asta.
De ce SHA-256 și nu o formulă cu litere sau date de naștere?
Sumele literelor și datele de naștere se aglomerează: zilele de naștere acoperă doar 1–31, iar suma literelor dă unele totaluri mult mai des decât altele. SHA-256 împrăștie uniform orice text peste cele 2²⁵⁶ rezultate posibile, iar o schimbare minusculă a textului dă o variantă complet diferită.
Majoritatea instrumentelor de tip „numere norocoase din nume” folosesc numerologie: fiecare literă primește o valoare (a = 1, b = 2, …), se adună și se reduc. Pare personal, dar numerele rezultate sunt departe de a fi uniforme:
- Sumele literelor se aglomerează. Suma mai multor litere se strânge în jurul unei valori tipice (teorema limită centrală la lucru), deci numele produc un interval îngust de totaluri. Un „mod 49” nu rezolvă problema: unele bile ies de câteva ori mai des decât altele, iar numele lungi sau scurte nu pot ajunge niciodată în anumite zone.
- Datele de naștere acoperă doar 1–31. Pe un bilet 6/49, numerele din date nu pot include niciodată 32–49, adică peste o treime din urnă. Milioane de jucători aleg date, așa că dacă iese o combinație „de zi de naștere”, premiul se împarte la mulți.
- Hash-urile cu modul prim au structură. Un hash clasic precum
Σ cod(cᵢ)·31ⁱ mod p, cupprim, e excelent pentru tabele hash, dar nume asemănătoare dau valori apropiate („Ana” și „Anb” diferă exact cu un pas). SHA-256 nu are o astfel de structură: cele două nume dau variante fără nicio legătură.
Îmi crește asta șansele de câștig?
Nu. Într-o loterie corectă fiecare combinație are exact aceeași șansă; la La Primitiva este 1 la 13.983.816. Un generator uniform te ajută doar să eviți combinațiile populare, cum ar fi zilele de naștere sau 1-2-3-4-5-6, așa că dacă totuși câștigi, e mai puțin probabil să împarți premiul.
Cum obțin numere noi la fiecare extragere?
Bifează „Numere noi pentru fiecare extragere” și alege data. Data intră în hash, așa că fiecare extragere are propria variantă, iar același nume cu aceeași dată dă în continuare aceleași numere.
Textul meu este trimis undeva?
Nu. Hash-ul și extragerea se calculează în JavaScript, în această pagină. Nimic din ce scrii nu este încărcat sau salvat de acest instrument. Dacă folosești „Copiază linkul”, textul e pus după # în link, o parte a adresei pe care browserul nu o trimite serverului când linkul e deschis.
Pot reproduce numerele singur?
Da. Deschide „Arată calculul” sub o variantă ca să vezi fiecare valoare intermediară, sau rulează scriptul Python scurt de pe această pagină. Dă exact aceleași numere.
Toată metoda încape în 30 de linii de Python. Rulează-l și obții exact numerele pe care le arată pagina pentru Maria Popescu:
import hashlib, re, struct, unicodedata
def lotto(text, game="la-primitiva", pools=((6, 1, 49), (1, 0, 9),), draw_date=""):
norm = re.sub(r"\s+", " ", unicodedata.normalize("NFKC", text).strip()).lower()
seed = hashlib.sha256(f"atypicalquant-lotto-v1|{game}|{draw_date}|{norm}".encode()).digest()
def words(): # SHA-256(seed || counter) -> 32-bit words
i = 0
while True:
yield from struct.unpack(">8I", hashlib.sha256(seed + struct.pack(">I", i)).digest())
i += 1
w = words()
def uniform(n): # rejection sampling: no modulo bias
limit = 2**32 - 2**32 % n
while (x := next(w)) >= limit:
pass
return x % n
tickets = []
for k, lo, hi in pools: # partial Fisher-Yates per drum
deck = list(range(lo, hi + 1))
for j in range(k):
r = j + uniform(len(deck) - j)
deck[j], deck[r] = deck[r], deck[j]
tickets.append(sorted(deck[:k]))
return tickets
print(lotto("Maria Popescu")) # [[7, 18, 19, 24, 35, 39], [5]] Generatoare pentru alte loterii
Loteriile sunt jocuri de noroc și nicio metodă nu îți crește șansele. Joacă pentru distracție, cu bani pe care îți permiți să-i pierzi. Interzis minorilor sub 18 ani.