2013-02-15 2 views
4

숫자와 함께 문자를 생성하는 GUID 개념을 읽었으므로 C# asp.net에서 반복하지 않고 16 자리 고유 난수를 생성 할 수 있지만 난 acheive 수있는 방법이 친절하게 제시 자에게충돌없이 asp.net에서 임의의 고유 16 자리 숫자를 생성하는 방법

을 원하지 않는 것이

+4

는, 그들은 무작위 수 없습니다. –

+0

1로 시작하고 * (심각하게)를 증가 * –

+0

시리즈를 원하지 않는다. 나는 16 자리 숫자의 완전 난수를 원한다. –

답변

5

당신은 임의의 클래스를 사용하여 난수 생성 할 수없는 충돌이 당신이 필요 없음을

private static Random RNG = new Random(); 

public string Create16DigitString() 
{ 
    var builder = new StringBuilder(); 
    while (builder.Length < 16) 
    { 
    builder.Append(RNG.Next(10).ToString()); 
    } 
    return builder.ToString(); 
} 

보장을 전 결과를 추적하십시오. sly는 실제로 메모리 누수입니다. (NB는 이것을 사용하지 않는 것이 좋습니다. 이전 결과를 모두 추적하는 것은 좋지 않은 생각입니다. 더 많은 정보를 원하면 16 문자까지 임의의 문자열을 사용하십시오. 고유성, 엔트로피를 증가,하지만 난 그것을 할 수있는 방법이) 보여주기 위해 포함되어야한다 : 당신은 반복없이 일련의 숫자를 만드는 경우

private static HashSet<string> Results = new HashSet<string>(); 

public string CreateUnique16DigitString() 
{ 
    var result = Create16DigitString(); 
    while (!Results.Add(result)) 
    { 
    result = Create16DigitString(); 
    } 

    return result; 
} 
+0

그것은 효과가 있었지만 날씨에이 방법을 사용하면 많은 양의 숫자를 생성 할 수 있음을 묻고 싶습니다. (수백만처럼) 재가공 될 것입니다. –

+2

@VivekSingh 내가 제공 할 수있는 것은 확률입니다. 16 자리 숫자의 10^16 조합이 있는데, 이것을 'N'이라고 부르며, 'k'숫자를 생성하면 모두가 유일하다는 확률을 나타냅니다. }}. 10 백만을 k로 사용하면 99.004983473 % –

+0

의 확률을 얻습니다. 해시 세트가 아니라 이전에 반환 된 숫자를 데이터베이스에 쓸 수 있습니까? 검색 할 숫자가 가득 찬 테이블이 여전히 늘어나지 만 이전의 모든 숫자를 해시에 저장하는 것만 큼 큰 부담이되지 않아야합니다. – nedlud