我需要一个伪随机生成器,它以一个数字作为输入并返回另一个数字,女巫是可重现的并且似乎是随机的。
- 每个输入数字应与一个输出数字完全匹配,反之亦然
- 相同的输入数字总是导致相同的输出数字
- 靠近的连续输入数字(例如 1 和 2)应该产生完全不同的输出数字(例如 1 => 9783526, 2 => 283)
它不一定是完美的,它只是为了创建随机但可重现的测试数据。
我使用 C#。
我前段时间写了这段有趣的代码,它产生了一些随机的东西。
public static long Scramble(long number, long max)
{
// some random values
long[] scramblers = { 3, 5, 7, 31, 343, 2348, 89897 };
number += (max / 7) + 6;
number %= max;
// shuffle according to divisibility
foreach (long scrambler in scramblers)
{
if (scrambler >= max / 3) break;
number = ((number * scrambler) % max)
+ ((number * scrambler) / max);
}
return number % max;
}
我想要更好、更可靠的东西,可以处理任何大小的数字(没有最大参数)。
可以使用 CRC 算法来解决这个问题吗?或者一些洗牌的东西。