-->

有任何方式来匹配的视觉福克斯Pro和C#的方法RAND(INT)。 净(there is any

2019-06-25 08:31发布

我迁移视觉福克斯专业代码为C#。 净

是什么让视觉福克斯临 :产生的5位数字基于文本字符串(在一个文本框捕捉)(“48963”)的字符串,如果你总是输入相同的文本字符串将得到的字符串总是5位(无反转),我的代码在C#。 NET应该产生相同的字符串。

有一些代码,我不能在dot.net兰德玩(INT)

在VisualFoxPro:

rand(intValue)

在C#。 净:

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

在C#中,如果有任何的方式来匹配的视觉福克斯Pro和C#的方法我不能基于我知道他们是非常不同的库(VFP和C#),但不一样的intValue一个值。 净

我想迁移以下代码(视觉福克斯临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!

Answer 1:

兰德在.NET不保证是主版本号之间的相同,所以Rand()具有一个种子1234在2.0可以比不同Rand()在4.0与完全相同的种子。

如果必须符合老implientation你需要找出视觉福克斯临如何做自己的兰德功能。 但是,如果你想相同的行为,但不是同一个号码,你可以哈希字符串只是输出。

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

现在,这是不加密的安全并不能保证产生不同计算机上的相同数量的(它返回基于.NET运行时不同版本的32位和64位之间的不同号码,(这实际上适用于GetHashCodeRandom本身!)),所以不存储它的数据库!


如果你需要相同数量出在相同的字符串,每次不管它是什么计算机只使用一个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];
}


Answer 2:

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

见构造随机():

提供了相同的种子值不同的随机的对象导致每个实例以产生随机数相同的序列



Answer 3:

在Visual FoxPro,您可以反复使用的种子值调用RAND()一次,然后省略在后续调用的种子产生随机数的顺序基本相同:

RAND(mySeed)
RAND()
RAND()

在C#中,你可以通过指定的种子值作为参数传递给做类似的事情Random构造函数:

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


Answer 4:

我用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


文章来源: there is any way to match the method RAND(INT) of Visual Fox Pro and C #. Net