어떻게 C#으로 항상 17 자의 고유 영숫자 데이터를 생성 할 수 있습니까?고유 한 영숫자를 생성하는 방법?
답변
새로운 Guid를 생성하고이를 modulo 62로 17 번 나눕니다. 각 숫자는 위에 설명 된 char 배열의 인덱스입니다 ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVW XYZ1234567890"). Guid를 사용하면 Guid만큼이나 고유 한 가치를 보장 할 수 있습니다. 당신이 잃는 독특한 비트에 관심을하는 경우
이 같은 MD5로 GUID를 해시 수
Guid guidValue = Guid.NewGuid();
MD5 md5 = MD5.Create();
Guid hashed = new Guid(md5.ComputeHash(guidValue.ToByteArray()));
UPDATE 가이 형식
을에 의해 생성 된 GUID로이 문서 (RFC 4122)에 따르면 및 비교 C#, 그들은 임의의 유형입니다. xxxxxxxx-xxxx-4xxx-Vxxx-xxxxxxxxxxxx
,
x
난수와V
는 YY는 두 개의 랜덤 비트는 10yy 같은 비트 레이아웃 개수이다 :이 타입은 다음 패턴을 갖는다.
여기에서 우리는 128 개 중 122 개의 임의의 비트를 갖습니다. 따라서 독창성 측면에서 Guid는 단순히 큰 난수이며 다른 임의의 숫자 생성 알고리즘을 자유롭게 사용할 수 있습니다. 88 비트 난수를 생성합니다 (예 : RNGCryptoServiceProvider
).
물론 Guids를 생성하는 데 사용되는 방법은 이후 버전의 프레임 워크에서 변경 될 수 있지만 Guid.NewGuid()는 코드 측면에서 저렴한 난수 생성기처럼 보입니다.
+1입니다. GUID는 얻을 수있는만큼 고유하므로이 알고리즘은 최대한의 고유성을 보존합니다. –
@Cosmin : GUID가 생성 된 방법을 모른 채로 가능한 많은 GUID의 고유성을 보장한다고 보장 할 수는 없습니다. 이 알고리즘은 유일성을 보장하는 모든 비트를 잃어 버릴 수 있습니다 (나는 그렇게 말하는 것은 아니지만 이론적 인 가능성이 있습니다). – LukeH
@LukeH : 게시물 이후에 ... 나는 GUID의 나머지 부분을 큰 108 비트 소수로 나눠서이 문제를 해결할 것임을 알았습니다. 또는 일부 부분 XOR-ing을 수행하여 처음 16 바이트의 모든 비트의 영향을받는 12 바이트로 작업하는지 확인하십시오. 물론 초기 GUID와 동일한 속성을 가질 수는 없지만 꽤 좋을 것입니다. –
당신은 하드 코드 문자 집합을 가질 수 있습니다 -
char[] chars = new char[62];
chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVW XYZ1234567890".ToCharArray();
그런 다음 62 0 사이의 임의의 숫자를 사용하여, 당신은 임의의 문자 각 시간을 얻을하고 문자열에 추가 할 수 있습니다.
그러나 언젠가는 차선을 따라 가려는 것을 보장 할 수 없으며, 중복 된 영숫자 문자열도받지 못할 것입니다.
가능하다면 GUID을 사용하지 않으시겠습니까?
GUID가 해당 범위 (128 비트) 내에서 고유성을 "보장"할 수있는 경우 왜 17 자의 A-Za-z0-9 문자열은 자체 범위 (대략 100 비트)와의 고유성을 "보장"하지 못합니까? 올바른 알고리즘을 사용하면 반복하기 전에 2 ** 100 고유 문자열을 생성 할 수 있습니다. – LukeH
17 문자 문자열이 생성되었습니다. 고유성을 검사하는 알고리즘이 있다면 보장 할 수 있습니다. 그렇지 않다. –
당신은 시도 할 수 ... GetRandomFileName 방법은 폴더 이름이나 파일 이름으로 사용할 수있는 강력하게 암호화, 임의의 문자열을 반환 http://msdn.microsoft.com/en-us/library/system.io.path.getrandomfilename.aspx
.
또는 원하는대로.
이 방법에는 제한이 있습니다. 각 호출에서 8.3 형식의 파일/폴더 이름 (예 : "qwer176d.d9s")을 제공하므로 소문자로 된 영숫자 문자는 11 자 밖에 없습니다. – Artemix
- 1. 고유 한 직불 번호를 자동으로 생성하는 방법
- 2. 고유 한 64 비트 키를 생성하는 방법
- 3. PHP 배열에서 고유 한 문자열을 생성하는 방법
- 4. .NET에서 고유 한 스레드마다 고유 한 난수를 생성하는 방법은 무엇입니까?
- 5. 클러스터링에서 고유 ID를 생성하는 방법
- 6. 문자열에서 고유 한 폴더 이름을 생성하는 질문
- 7. C++에서 고유 한 ID를 생성하는 알고리즘?
- 8. Ruby에서 고유 한 6 자리 영숫자 코드를 생성하는 방법
- 9. 8 자 미만의 고유 한 숫자를 생성하는 방법
- 10. AUTOINCREMENT를 사용하지 않고 고유 ID를 생성하는 방법
- 11. sugarcrm의 모듈에 고유 ID 필드를 생성하는 방법
- 12. 고유 한 요소를 얻는 방법?
- 13. 부분적으로 고유 한/고유 한 행을 반환합니다.
- 14. 고유 한 대 오라클의 고유 한 키워드
- 15. '고유 한 키'또는 '고유 한 키'색인
- 16. 고유 한 문자열을 고유 한 정수로 변환
- 17. Visual Studio에서 고유 한 메서드 이름을 자동으로 생성하는 방법이 있습니까?
- 18. jsp를 사용하여 고유 한 문자열을 생성하는 방법은 무엇입니까?
- 19. 고유 한 세션 ID를 생성하는 가장 좋은 방법은 무엇입니까?
- 20. db 레코드와 일치하는 고유 한 URL 변수를 생성하는 방법은 무엇입니까?
- 21. 짧고 고유 한 파일/폴더 이름을 생성하는 좋은 방법은 무엇입니까?
- 22. MySQL에서 고유 한 영숫자 컨텐츠를 생성하는 방법은 무엇입니까?
- 23. RoR에서 고유 한 익명 사용자 이름을 생성하는 방법은 무엇입니까?
- 24. 가장 효율적인 방법 ... 고유 한 무작위 문자열
- 25. 술어와 고유 한 오브젝트
- 26. REGEX는 단순한 영숫자를 거부합니다
- 27. 영숫자를 인식하는 정규식 문제
- 28. 고유 한 추적 번호 생성
- 29. CouchDB의 짧고 고유 한 키
- 30. 사용자 당 고유 ID를 생성하는 방법은 무엇입니까?
당신은 결코 유일한 가치를 보장 할 수 없습니다. 유한 시스템에는 유일무이 한 것이 없습니다. –
Guid.NewGuid(). ToString ("N")을 사용 해본 적이 있습니까? Substring (0,17) 위와 같이 고유해야하는 방식을 결정해야합니다. ~ F :-) –
@ DanielA.White [이 문서] (http://www.ietf.org/rfc/rfc4122.txt)의 3 페이지를 기반으로 GUID 클래스는 고유 한 값을 생성 할 수 있습니다. – Amir