有任何方法可以匹配Visual Fox Pro和C#的方法RAND(INT)。净

时间:2012-06-05 18:44:11

标签: c# methods random foxpro

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

是什么让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

THKS!

4 个答案:

答案 0 :(得分:4)

不保证主要版本号之间的Rand在.NET中是相同的,因此2.0中种子为Rand()的{​​{1}}可能与4.0中的1234不同完全相同的种子。

如果你必须匹配旧的implientation,你需要找出Visual Fox Pro如何做他们的Rand功能。但是,如果你想要相同的行为,但不是相同的数字,你可以散列字符串只输出那个。

Rand()

现在这不是加密安全的,并且不保证在不同的计算机上生成相同的数字(它返回32到64位之间的不同数字,以及基于.Net运行时的不同版本(这实际上适用于两个{ {1}}和Random r = new Random (myTextBox.Text.GetHashCode()); return r.Next(); 本身!)),所以不要将它存储为数据库!


如果您在同一个字符串中每次都需要相同的号码,无论它在哪台计算机上,只需在GetHashCode命名空间中使用RNGCryptoServiceProvider

Random

答案 1 :(得分:3)

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

请参阅constructor获取随机():

  

为不同的Random对象提供相同的种子值   每个实例产生相同的随机数序列

答案 2 :(得分:2)

在Visual FoxPro中,您可以通过使用种子值调用RAND()一次重复生成相同的随机数序列,然后在后续调用中省略种子:

RAND(mySeed)
RAND()
RAND()

在C#中,您可以通过将种子值指定为Random构造函数的参数来执行类似的操作:

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

答案 3 :(得分:1)

我在字符串值上使用GetHashCode方法来种子Random

var s = "abcdefg";
var random = new Random(s.GetHashCode());
var hash = random.Next(10000, 99999));

以下是我在几个测试用例中得到的结果:

"abcdefg" => 43065
"abcdefg" => 43065
"defghij" => 62962
"qwerty"  => 72764
"defghij" => 62962
"qwerty"  => 72764
"abcdefg" => 43065