Algorytm właściwa PRNG (Pseudo-Random Number Generator) będzie miał czas cyklu, podczas którego nigdy nie będzie w takim samym stanie. Jeśli odsłonić całą stan PRNG w ilości pobranej od niego, otrzymasz unikalny numer gwarantowane przez okres generatora.
Prosty PRNG że robi to nazywane jest „ normalny przystający PRNG”, które wykonuje iteracje wzoru:
X(i) = AX(i-1)|M
Stosując odpowiednią parę czynników można dostać okres 2 ^ 30 (około 1 mld euro) od prostego PRNG z 32 bitowym akumulatorze. Należy pamiętać, że trzeba będzie 64 bit long long zmienną tymczasową trzymać pośrednią „AX” część obliczeń. Większość, jeśli nie wszystkie kompilatory C będzie wspierać ten typ danych. Należy również być w stanie to zrobić z liczbowym typem danych w większości dialektów SQL.
Z odpowiednimi wartościami A i M możemy uzyskać generator liczb losowych o dobrych właściwościach statystycznych i geometrycznych. Jest znanym papier o tym napisane przez Fishman i Moore'a.
Dla M = 2 ^ 31 - 1 otrzymujemy mogą korzystać z wartościami poniżej, aby uzyskać PRNG z ładnym długim okresie (2 ^ 30 IIRC).
Dobrymi wartościami:
742,938,285
950,706,376
1,226,874,159
62,089,911
1,343,714,438
Zauważ, że ten rodzaj generatora jest (z definicji) nie kryptograficznie bezpieczne. Jeśli wiesz, ostatni numer wygenerowany z niego można przewidzieć, co będzie robić dalej. Niestety uważam, że nie można dostać bezpieczeństwo kryptograficzne i gwarantowaną niepowtarzalność w tym samym czasie. Dla PRNG być kryptograficznie bezpieczny (np Blum Blum Shub ) nie może wystawiać wystarczający stan w wygenerowanej liczby, aby umożliwić następny numer w kolejności należy przewidzieć. Dlatego stan wewnętrzny jest szerszy niż generowanym numerem oraz (aby mieć dobre zabezpieczenie) okres będzie dłuższy niż liczba możliwych wartości, które mogą być generowane. Oznacza to, że liczba ekspozycji nie będzie wyjątkowy w terminie.
Z podobnych powodów, tak samo jest z generatorów długookresowe, takie jak Mersenne Twister.