我正在将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
。NET中的主版本号不能保证相同,因此在[2.0]中带有Rand()
种子的1234
与在4.0中具有完全相同的种子的Rand()
可以是不同的。
如果必须匹配旧的含义,则需要了解Visual Fox Pro如何实现其Rand功能。但是,如果您想要相同的行为,而不是相同的数字,则可以对字符串进行哈希处理,只需将其输出即可。
Random r = new Random (myTextBox.Text.GetHashCode());
return r.Next();
现在,这在密码上不是安全的,并且不能保证在不同的计算机上生成相同的数字(它会返回32位和64位之间的不同数字,并基于.Net运行时返回不同的版本(这实际上适用于两个[C0 ]和GetHashCode
本身!)),所以不要将其存储在数据库中!
如果您每次在同一台计算机上都需要从同一字符串中取出相同的数字,则只需在Random
名称空间中使用RNGCryptoServiceProvider。
System.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];
}
请参阅Random r = new Random (intValue);
return r.Next();
以获取Random():
为不同的Random对象提供相同的种子值会导致每个实例产生相同的随机数序列
在Visual FoxPro中,您可以使用种子值一次调用RAND(),然后在后续调用中省略种子,从而重复生成相同的随机数序列:
constructor
在C#中,您可以通过指定种子值作为RAND(mySeed)
RAND()
RAND()
构造函数的参数来执行类似的操作:
Random
我在字符串值上使用了Random r = new Random (mySeed);
r.Next(intValue);
r.Next(intValue);
方法来植入GetHashCode
:
Random
以下是一些测试用例的结果:
var s = "abcdefg";
var random = new Random(s.GetHashCode());
var hash = random.Next(10000, 99999));