C # 의 임의의 정수 어떻게 작성합니까?
'랜덤' 클래스 이 난수 생성하기 위해 사용된다. (즉 dtep 임의적입니까 물론이겠지).
예:
<! - 언어: c # - >.
Random rnd = new Random();
int month = rnd.Next(1, 13); // creates a number between 1 and 12
int dice = rnd.Next(1, 7); // creates a number between 1 and 6
int card = rnd.Next(52); // creates a number between 0 and 51
이 경우 두 개 이상 만들 것인가, '랜덤' 이 인스턴스입니다 및 재사용합니다 난수 유지해야 합니다. 너무 짧은 시간 내에 만들 경우, 그들은 새로운 인스턴스들도 닫으십시오 깔의 같은 일련의 임의적입니까 숫자로 임의적입니까 발생기입니다 는 시드 시스템에서 편리합니다.
는 질문에 대한 대답은 아주 간단한 방법이지만 좀 복잡하다. 즉, 거의 모두가 사용할 수 있다 "고 밝혀 일부는 이미 제안됩니다 클래스를 사용하여 임의의 유사환 암호화 구분된다. 그런데 어떤 때 선택할 수 있습니다.
이를 위해 먼저 무작위성은 및 철학 용어 이해 해야 될 수 있다.
난 이 동영상을 통해 심도 있는 것을 볼 수 있습니다 (philosophy of c # 에 있는 댁이라면 무작위성은 [https://www.youtube.com/watch? v = 3fy 트시스크 2] [1]
먼저 하는 일은 잘 알려 무작위성은 철학. 빨강, 녹색, 노란색) 중에서 선택할 수 있는 사람은 알 때 우리는 무슨 일이 내부적으로. 사람이 어떨거라고 선택됨을 빨간색이나 노란색 또는 그린입니까?
그 선택이 될 수 있으며, 일부 초기 돌아보 댁이라면 꽂으십시오 결정하는 사람은 마음을 좋아하는 색이, 행운의 색상 및 드릴링됩니다. 즉, 임의의 점) 로 그 중 일부 초기 트리거할 용어로 시드스티스 촉발제였군 선동 선택할 수 있는 임의의 값이 그를 시드입니다 시작됩니다.
이 경우 해당 종류의 임의적입니까 번호는 이제 시드입니다 가늠하기는 쉽지 dtep 때 그 어려운 것 '이라고 tpc. 고정되었는지 및 시드입니다 무순서 번호는 난수) 이라고 한다.
예를 들어 한 선택했습니까 은 색상 및 사운드 조합으로의 날씨 따라 그 어렵다는 것 초기 시드입니다.
이제 할 수 있는 중요한 기술서임을 - let me
Class 는 임의의 값을 예측할 수 있는 시스템의 CPU 클럭 시드입니다 매우. 그래서 즉 임의적입니까 클래스 C # 생성하는지 dtep 난수, 다음은 코드의 마찬가지다.
var random = new Random();
int randomnumber = random.Next()
'클래스' OS 를 사용하는 동안 네그크라이프트로저비스프로비더 발령합니다 엔트로피가 생겼다. OS 는 임의의 값을 사용하여 생성할지 키보드 및 마우스 클릭, 엔트로피가 원하는거요 사운드, 타이밍, 열 임시 상술합니다. 댁이라면 대한 코드는 아래와 같습니다.
using (RNGCryptoServiceProvider rg = new RNGCryptoServiceProvider())
{
byte[] rno = new byte[5];
rg.GetBytes(rno);
int randomvalue = BitConverter.ToInt32(rno, 0);
}
이해할 수 있도록 OS 엔트로피가 지켜보리니 온 이 동영상을 14:30 [https://www.youtube.com/watch? v = 3fy 트시스크 2] [5] 여기서 로직 정보 엔트로피 (os) 는 설명했다. 그래서 간단히 나치도요 유사환 암호화 생성하는지 안전한 난수 있다.
[1]: https://www.youtube.com/watch? v = 3fy 트시스크 2
[5]:
t = 14m31s할 때마다 새로운 임의적입니까 () 이 초기화되었습니다. 즉 동일한 값을 루프 확보하십시오 꽉 많은 시간. 단일 임의적입니까 인스턴스입니다 계속 유지해야 합니다 다음 사용하여 같은 컨트롤러상의 인스턴스입니다.
//Function to get random number
private static readonly Random getrandom = new Random();
public static int GetRandomNumber(int min, int max)
{
lock(getrandom) // synchronize
{
return getrandom.Next(min, max);
}
}
새로운 것을 두려워 '시드 무순서 ()' 가 현재 시간스탬프와.
'새 임의적입니까 이네스트 (int, int. 맥스발루 민발루.)' ()
자세한 내용은 < 보면,,, a href = " http://msdn.microsoft.com/en-us/library/system.random.aspx" > Random< /a>. 클래스 표시되어도 참고:
>. 그러나 이 시계는 사용하여 만들 수 있기 때문에, 다른 임의 유한 해결안에서는 파라메트리스 구성자를 의 객체에는 닫으십시오 생산하는 동일해집니다 시퀀스에만 난수 생성 난수 생성기, 왕위 계승 순위
그래서 이 코드를 사용하지 않는 일련의 난수 생성.
내가 하고 싶은 추가하기에서는 암호학적으로 안전한 버전:
네그크라이프트로저비스프로비더 클래스 ([MSDN] [1] 또는 도네페얼스)
리디스포사블 구현합니다.
using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
{
byte[] randomNumber = new byte[4];//4 for int32
rng.GetBytes(randomNumber);
int value = BitConverter.ToInt32(randomNumber, 0);
}
[1]: 이아스파스 https://msdn.microsoft.com/en-us/library/system.security.cryptography.rngcryptoserviceprovider (v = vs. 110)
Random rand = new Random(DateTime.Now.Millisecond);
내가 알고 있는 '새' 에서는 현재 진드기 무순서 () 로, 하지만 여전히 충분히 it& # 39 로 현재 밀리초입니다 시드입니다 시드, s 优秀 임의적입니까 시작
이 솔루션은 pokemonsilver. 충분하지 않습니다. 내가 필요한 불규칙적 빠르고 매우 넓은 범위의 값을 얻기 위해 int 는 루프 쉐퍼드도 톤의 복제본임을 있는 것이다. 그런 후 이 문제를 다루기 위해 그간 너무 멀리 긴 I once and for all 무순서 결과 최종 결정했다.
내가 사용하는 Guid 의 임의의 정수 만들기, 그럼 내 임의적입니까 인스턴스화합니다 비사양 자리 구문 분석 아웃해야 의해 구분된다.
public int GenerateRandom(int min, int max)
{
var seed = Convert.ToInt32(Regex.Match(Guid.NewGuid().ToString(), @"\d+").Value);
return new Random(seed).Next(min, max);
}
public static class IntUtil
{
private static Random random;
private static void Init()
{
if (random == null) random = new Random();
}
public static int Random(int min, int max)
{
Init();
return random.Next(min, max);
}
}
그 때문에 같은 정적 클래스 사용할 수 있습니다.
for(var i = 0; i < 1000; i++)
{
int randomNumber = IntUtil.Random(1,100);
Console.WriteLine(randomNumber);
}
난 내가 맘에 드는 외곽진입 좋습니다.
답을 수정되었음 [here] [1].
액세스하도록 경우 인텔 호환 CPU 안전한 난수 및 문장열 이러한 라이브러리를 사용하여 실제 키를 생성할 수 있습니다. https://github.com/JebteK/RdRand 와 https://www.rdrand.com/
그냥 here 의 최신 버전을 다운로드하십시오 포함시키십시오 젭테k.드런드 및 추가하기에서는 기술서임을 사용하여 일이다. 그 후, all you need to do is this:
// Check to see if this is a compatible CPU
bool isAvailable = RdRandom.GeneratorAvailable();
// Generate 10 random characters
string key = RdRandom.GenerateKey(10);
// Generate 64 random characters, useful for API keys
string apiKey = RdRandom.GenerateAPIKey();
// Generate an array of 10 random bytes
byte[] b = RdRandom.GenerateBytes(10);
// Generate a random unsigned int
uint i = RdRandom.GenerateUnsignedInt();
string ret = Randomizer.GenerateKey(<length>, "<key>");
uint ret = Randomizer.GenerateUInt("<key>");
byte[] ret = Randomizer.GenerateBytes(<length>, "<key>");
[1]: # 22801467 https://stackoverflow.com/questions/1122483/random-string-generator-returning-same-string/22801467
숫자는 '붙박이' 클래스 (시스템.랭동) 에 의해 생성되는 무순서 생성하는지 dtep 난수.
가장 가까운, 안전한 난수, 우리는 진정한 스케쳐내 안 " dtep 임의적입니까 Generator". c # 의 사용하여 클래스를 생성할 수 있는 암호화 등 '네그크라이프트로저비스프로비더'.
그렇게 계속 필요한 경우 , 임의 소스 등 외부 장치를 사용해야 할 진정한 숫자를 차지할 경우 방사성 비호환성의 시드입니다 난수 발생기입니다. 이후, 정의에 의해 생성된 모든 숫자가 순수하게 알고리즘 고말은 就不可能拥有 정말 어렵네.
이것은 클래스 I 사용합니다. (1, 666) 'like' 랭동누마버지의트랭동 작동됨
internal static class RandomNumber
{
private static Random r = new Random();
private static object l = new object();
private static Random globalRandom = new Random();
[ThreadStatic]
private static Random localRandom;
public static int GenerateNewRandom(int min, int max)
{
return new Random().Next(min, max);
}
public static int GenerateLockedRandom(int min, int max)
{
int result;
lock (RandomNumber.l)
{
result = RandomNumber.r.Next(min, max);
}
return result;
}
public static int GenerateRandom(int min, int max)
{
Random random = RandomNumber.localRandom;
if (random == null)
{
int seed;
lock (RandomNumber.globalRandom)
{
seed = RandomNumber.globalRandom.Next();
}
random = (RandomNumber.localRandom = new Random(seed));
}
return random.Next(min, max);
}
}
동시에 이는 그땅은:
Random random = new Random();
int randomNumber = random.Next()
'다음 ()' 이 메서드는 막스야) 과 두 개의 매개 변수
만일 내가 원하는 건 내 난수 스크램블된 I& # 39 라고 사이에 5, 15 개, just do; d
int randomNumber = random.Next(5, 16)
난 항상 flfile. 크리ptorng 대한 강력한 임의적입니까 시드입니다 아닌 하게하면서요.
using System;
using System.Security.Cryptography;
public class Program
{
public static void Main()
{
var random = new Random(GetSeed());
Console.WriteLine(random.Next());
}
public static int GetSeed()
{
using (var rng = new RNGCryptoServiceProvider())
{
var intBytes = new byte[4];
rng.GetBytes(intBytes);
return BitConverter.ToInt32(intBytes, 0);
}
}
}
매번 새로운 임의적입니까 발생기입니다 사용할 때 일어나는 제시하십시오 싶었다. 각 클래스 또는 두 난수를 필요로 하는 두 가지 방법이 있다고 가정합니다. 그리고 그 소박하게 다음과 같은 코드를 있습니다
public class A
{
public A()
{
var rnd=new Random();
ID=rnd.Next();
}
public int ID { get; private set; }
}
public class B
{
public B()
{
var rnd=new Random();
ID=rnd.Next();
}
public int ID { get; private set; }
}
서로 다른 두 개의 id 를 얻을 수 있을까요? 없엉
class Program
{
static void Main(string[] args)
{
A a=new A();
B b=new B();
int ida=a.ID, idb=b.ID;
// ida = 1452879101
// idb = 1452879101
}
}
해결 방법은 always 사용하여 하나의 정적인 임의적입니까 발생기입니다. 다음과 같습니다.
public static class Utils
{
public static readonly Random random=new Random();
}
public class A
{
public A()
{
ID=Utils.random.Next();
}
public int ID { get; private set; }
}
public class B
{
public B()
{
ID=Utils.random.Next();
}
public int ID { get; private set; }
}
다음 코드는 랜덤 되돌려줍니다 number.& # 160;
int num = random.Next();
다음 코드는 난수를 되돌려줍니다 미만임 1000년 .& # 160;
int num = random.Next(1000);
다음 코드는 난수를 되돌려줍니다) 과 사이에 최대 약점이다.
public int RandomNumber(int min, int max)
{
& # 160; & # 160; & # 160; & # 160;
Random random = new Random();
return random.Next(min, max);
}
& # 160; & # 160;