2010-07-15 1 views
7

길이가 30자인 고유 한 문자열을 생성해야합니다. 처음에는 GUID를 생성하고 처음 두 문자를 제거했습니다.GUID, 30 자의 임의 문자열

Guid.NewGuid().ToString("N").Substring(2); 

두 개의 첫 번째 문자를 제거하면 "고유성"에 중요한 영향을 미칩니 까? 내가 걱정해야 할 것이 있나요?

고유 한 것으로 보장 될 임의의 30 자 문자열을 생성하는 더 좋은 방법이 있습니까?

답변

5

두 개의 16 진수 문자를 제거하거나 GUID에서 8 비트를 제거하면 덜 고유하지만 120 비트는 여전히 고유 한 값을 유지합니다. 매초마다 수백만 개의 ID를 생성하지 않으려면 충돌 위험없이 시간 소인 및 고유 식별자에서 일부 비트를 제거하는 것이 안전해야합니다. 예를 들어 structure of GUIDs에 대한 Wikipedia를 참조하십시오.

대체 솔루션은 GUID를 Base64 또는 16 진수 문자로만 제한하는 경우와 같이 인코딩하는 것입니다. Base64로 인코딩 된 128 비트는 길이 24의 문자열을 생성합니다. 그런 다음 6 개의 임의의 문자를 추가하여 문자열을 30 개의 문자로 채워서 훨씬 더 독창적으로 만들 수도 있습니다.

+0

제 13 회 문자 (.NET에서 생성 된 GUID)는 항상 "4"가 될 것으로 보인다. 나는 이것을 제거 할 수있는 고정 바이트 중 하나라고 추측합니다. 타임 스탬프 또는 고유 식별자는 어디에 위치합니까? – harmony

+0

4는 GUID를 생성하는 데 사용 된 알고리즘의 버전을 나타냅니다. http://msdn.microsoft.com/en-us/library/cc246027.aspx와 거기에 언급 된 내부 구조에 대한 RFC를 참조하십시오. –

5

GUID를 자르면 고유성이 손실됩니다. 왜 GUID가 생성되는지 이해해야하는 이유를 이해해야합니다. 이것은 몇 부분으로 구성 소인

  • 60 비트 컴퓨터 식별자
  • 48 비트 uniquifier의
  • 14 비트
  • 6 비트가 처음 두 폐기함으로써

고정되고 문자는 타임 스탬프 부분의 8 개의 최상위 비트를 버립니다. This article은 잘 설명하고 GUID를 자르는 위험성이 있습니다. 또한 GUID에 사용 된 것과 동일한 기술을 사용하여 전 세계적으로 고유하지는 않지만보다 제한된 상황에서 고유 한 고유 식별자를 만드는 방법에 대해서도 설명합니다.

1

다른 응답자가 나에게 말했듯이 GUID에서 두 문자를 제거하면 더 이상 고유하지 않습니다.

그러나 다른 방법이 있습니다. 정보를 잃지 않고 GUID를 최대 20 자까지 단축하거나 ASCII 인코딩으로 고유성을 줄이는 것이 가능합니다. 제프 앳 우드에 의해이 블로그 게시물

체크 아웃 :
Coding Horror: Equipping our ASCII Armor