c# - 有什么方法可以匹配 Visual Fox Pro 和 C#.Net 的 RAND(INT) 方法

标签 c# methods random foxpro

我正在将 Visual Fox Pro 代码迁移到 C#。网络

是什么造就了 Visual Fox Pro: 根据文本字符串(在文本框中捕获)生成一个 5 位数字的字符串(“48963”),如果您始终输入相同的文本字符串,将始终获得该字符串 5 位数字(无反转),我的 C# 代码。 NET 应该生成相同的字符串。

有一些代码我在dot.net Rand (int) 中无法播放

在 VisualFoxPro 中:

rand(intValue)

在 C# 中。网:

Random r = new Random ();
return r.Next(intValue);

在 C# 中,我无法基于相同的 intValue 生成单个值,我知道它们是非常不同的库(VFP 和 C#),但如果有任何方法可以匹配 Visual Fox Pro 和 C# 的方法,则不会。网

我想迁移以下代码(Visual Fox Pro 6 到 C#)

gnLower = 1000
gnUpper = 100000
vcad = 1
For y=gnLower to gnUpper step 52
    genClave = **Rand(vcad)** * y
    vRound = allt(str(int(genclave)))
    IF Len(vRound) = 3
            vDec = Right(allt(str(genClave,10,2)), 2)
            finClave = vRound+vDec
            Thisform.txtPass.value = Rand(971);
    Exit
    Endif
Next y

输出:

vcad = 1 return: 99905 vcad = 2 return: 10077 vcad = thanks return: 17200

最佳答案

不能保证 .NET 中的 Rand 在主要修订号之间相同,因此 2.0 中种子为 1234Rand() 可能不同于4.0 中的 Rand() 具有完全相同的种子。

如果您必须匹配旧的暗示,您将需要了解 Visual Fox Pro 是如何执行其 Rand 函数的。但是,如果您想要相同的行为,但不是相同的数字,您可以对字符串进行散列处理,只输出它。

Random r = new Random (myTextBox.Text.GetHashCode()); 
return r.Next();

现在这不是加密安全的并且不能保证在不同的计算机上生成相同的数字(它返回 32 位和 64 位之间的不同数字,以及基于 .Net 运行时的不同版本(这实际上适用于 GetHashCodeRandom 本身!)),所以不要将其存储在数据库中!


如果无论在哪台计算机上,每次都需要从同一个字符串中输出相同的数字,只需使用 RNGCryptoServiceProviderSystem.Security.Cryptography 命名空间中。

//Returns the same number between 0 and 255 every time.
using(var myRng = new RNGCryptoServiceProvider(myTextBox.Text))
{
    var ret = new byte[1];
    myRng.GetBytes(ret);
    return ret[0];
}

关于c# - 有什么方法可以匹配 Visual Fox Pro 和 C#.Net 的 RAND(INT) 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10903014/

相关文章:

c# - 为什么我不能用 linq 迭代可以用 foreach 迭代的东西?

c# - 推送通知无法使用 asp.net 到达 ios 设备?

java - 在java中模拟调用外部方法

algorithm - 如何证明一个随机数生成器优于另一个?

c# - 简单规则引擎?

c# - MS Bot 框架模拟器更改用户 ID

Java:在方法中引用点运算符之前的对象

java - 从另一个方法调用的 boolean 方法

python - 使用随机时,哪种形式返回相同的 50% 机会?

haskell - 简单 Haskell Monad - 随机数