Вот основа алгоритма:
uint NextUInt()
{
uint t= (x^(x<<11));
x=y;
y=z;
z=w;
return (w= (w^(w>>19))^(t^(t>>8)));
}

перед использованием необходимо инициализировать переменные t,x,y,z,w. Это можно сделать по часам, анализируя данные в файлах - к примеру Log.txt и debug.txt или просто храня посл. значения в retain.

Алгоритм считается достаточно хорошим с периодом повторяемости 2^50 и высокой скоростью.