我收集的:
--------------------------
大家可能都用过Chinaren的校友录,不久前它的留言簿上加了一个防止灌水的方法,就是系统每次产生一个由随机的数字和字母组成的图片,每次留言必须正确地输入这些随机产生的字符,否则不能添加留言。这是一个很好的防止恶意攻击的方法,其核心的技术就是如何产生随机数。Chinaren网站是使用PHP实现的,而我们可以充分利用ASP.net的强大功能很轻易地实现。
在.net Framework中提供了一个专门用来产生随机数的类System.Random,使用这个类时必须导入System命名空间。当然,命名空间System在每个ASP.net页面中都是自动导入的,所以我们可以直接使用这个类。 对于随机数,大家都知道,计算机不可能产生完全随机的数字,所谓的随机数发生器都是通过一定的算法对事先选定的随机种子做复杂的运算,用产生的结果来近似的模拟完全随机数,这种随机数被称作伪随机数。伪随机数是以相同的概率从一组有限的数字中选取的。所选数字并不具有完全的随机性,但是从实用的角度而言,其随机程度已足够了。伪随机数的选择是从随机种子开始的,所以为了保证每次得到的伪随机数都足够地“随机”,随机种子的选择就显得非常重要。如果随机种子一样,那么同一个随机数发生器产生的随机数也会一样。一般地,我们使用同系统时间有关的参数作为随机种子,这也是.net Framework中的随机数发生器默认采用的方法。 我们可以使用两种方式初始化一个随机数发生器: 第一种方法不指定随机种子,系统自动选取当前时间作为随机种子: Random ro = new Random(); 第二种方法可以指定一个int型参数作为随机种子: int iSeed=10; Random ro = new Random(10); 之后,我们就可以使用这个Random类的对象来产生随机数,这时候要用到Random.Next()方法。这个方法使用相当灵活,你甚至可以指定产生的随机数的上下限。 不指定上下限的使用如下: int iResult; iResult=ro.Next(); 下面的代码指定返回小于100的随机数: int iResult; int iUp=100; iResult=ro.Next(iUp); 而下面这段代码则指定返回值必须在50-100的范围之内: int iResult; int iUp=100; int iDown=50; iResult=ro.Next(iDown,iUp); 除了Random.Next()方法之外,Random类还提供了Random.NextDouble()方法产生一个范围在0.0-1.0之间的随机的双精度浮点数: double dResult;
dResult=ro.NextDouble();
--------------------------
大家可能都用过Chinaren的校友录,不久前它的留言簿上加了一个防止灌水的方法,就是系统每次产生一个由随机的数字和字母组成的图片,每次留言必须正确地输入这些随机产生的字符,否则不能添加留言。这是一个很好的防止恶意攻击的方法,其核心的技术就是如何产生随机数。Chinaren网站是使用PHP实现的,而我们可以充分利用ASP.net的强大功能很轻易地实现。
在.net Framework中提供了一个专门用来产生随机数的类System.Random,使用这个类时必须导入System命名空间。当然,命名空间System在每个ASP.net页面中都是自动导入的,所以我们可以直接使用这个类。 对于随机数,大家都知道,计算机不可能产生完全随机的数字,所谓的随机数发生器都是通过一定的算法对事先选定的随机种子做复杂的运算,用产生的结果来近似的模拟完全随机数,这种随机数被称作伪随机数。伪随机数是以相同的概率从一组有限的数字中选取的。所选数字并不具有完全的随机性,但是从实用的角度而言,其随机程度已足够了。伪随机数的选择是从随机种子开始的,所以为了保证每次得到的伪随机数都足够地“随机”,随机种子的选择就显得非常重要。如果随机种子一样,那么同一个随机数发生器产生的随机数也会一样。一般地,我们使用同系统时间有关的参数作为随机种子,这也是.net Framework中的随机数发生器默认采用的方法。 我们可以使用两种方式初始化一个随机数发生器: 第一种方法不指定随机种子,系统自动选取当前时间作为随机种子: Random ro = new Random(); 第二种方法可以指定一个int型参数作为随机种子: int iSeed=10; Random ro = new Random(10); 之后,我们就可以使用这个Random类的对象来产生随机数,这时候要用到Random.Next()方法。这个方法使用相当灵活,你甚至可以指定产生的随机数的上下限。 不指定上下限的使用如下: int iResult; iResult=ro.Next(); 下面的代码指定返回小于100的随机数: int iResult; int iUp=100; iResult=ro.Next(iUp); 而下面这段代码则指定返回值必须在50-100的范围之内: int iResult; int iUp=100; int iDown=50; iResult=ro.Next(iDown,iUp); 除了Random.Next()方法之外,Random类还提供了Random.NextDouble()方法产生一个范围在0.0-1.0之间的随机的双精度浮点数: double dResult;
dResult=ro.NextDouble();
// Example of the Random class constructors and Random.NextDouble( )
// method.
using System;
using System.Threading;public class RandomObjectDemo
{
// Generate random numbers from the specified Random object.
static void RunIntNDoubleRandoms( Random randObj )
{
// Generate the first six random integers.
for( int j = 0; j < 6; j++ )
Console.Write( " {0,10} ", randObj.Next( ) );
Console.WriteLine( ); // Generate the first six random doubles.
for( int j = 0; j < 6; j++ )
Console.Write( " {0:F8} ", randObj.NextDouble( ) );
Console.WriteLine( );
} // Create a Random object with the specified seed.
static void FixedSeedRandoms( int seed )
{
Console.WriteLine(
"\nRandom numbers from a Random object with " +
"seed = {0}:", seed );
Random fixRand = new Random( seed ); RunIntNDoubleRandoms( fixRand );
} // Create a random object with a timer-generated seed.
static void AutoSeedRandoms( )
{
// Wait to allow the timer to advance.
Thread.Sleep( 1 ); Console.WriteLine(
"\nRandom numbers from a Random object " +
"with an auto-generated seed:" );
Random autoRand = new Random( ); RunIntNDoubleRandoms( autoRand );
} static void Main( )
{ Console.WriteLine(
"This example of the Random class constructors and " +
"Random.NextDouble( ) \n" +
"generates the following output.\n" );
Console.WriteLine(
"Create Random objects, and then generate and " +
"display six integers and \nsix doubles from each."); FixedSeedRandoms( 123 );
FixedSeedRandoms( 123 ); FixedSeedRandoms( 456 );
FixedSeedRandoms( 456 ); AutoSeedRandoms( );
AutoSeedRandoms( );
AutoSeedRandoms( );
}
}/*
This example of the Random class constructors and Random.NextDouble( )
generates the following output.Create Random objects, and then generate and display six integers and
six doubles from each.Random numbers from a Random object with seed = 123:
2114319875 1949518561 1596751841 1742987178 1586516133 103755708
0.01700087 0.14935942 0.19470390 0.63008947 0.90976122 0.49519146Random numbers from a Random object with seed = 123:
2114319875 1949518561 1596751841 1742987178 1586516133 103755708
0.01700087 0.14935942 0.19470390 0.63008947 0.90976122 0.49519146Random numbers from a Random object with seed = 456:
2044805024 1323311594 1087799997 1907260840 179380355 120870348
0.21988117 0.21026556 0.39236514 0.42420498 0.24102703 0.47310170Random numbers from a Random object with seed = 456:
2044805024 1323311594 1087799997 1907260840 179380355 120870348
0.21988117 0.21026556 0.39236514 0.42420498 0.24102703 0.47310170Random numbers from a Random object with an auto-generated seed:
380213349 127379247 1969091178 1983029819 1963098450 1648433124
0.08824121 0.41249688 0.36445811 0.05637512 0.62702451 0.49595560Random numbers from a Random object with an auto-generated seed:
861793304 2133528783 1947358439 124230908 921262645 1087892791
0.56880819 0.42934091 0.60162512 0.74388610 0.99432979 0.30310005Random numbers from a Random object with an auto-generated seed:
1343373259 1992194672 1925625700 412915644 2026910487 527352458
0.04937517 0.44618494 0.83879212 0.43139707 0.36163507 0.11024451
*/
int i = rand.Next();