2011-07-05 10 views
8

업로드 된 파일에 대해 Megaupload가 생성 한 ID와 같은 고정 길이의 고유 식별자를 생성하려고합니다. 예를 들어Java에서 고정 길이의 고유 식별자를 생성하는 방법은 무엇입니까?

: A-Z 및 0-9로부터 총 상이한 조합 2,821,109,907,456이다 (8)의 고정 길이로하여이 예에서는

  • ALGYTAB5
  • BCLD23A6

.

생성 된 ID 중 하나가 이미 사용 된 경우 어떻게됩니까? 이러한 ID는 데이터베이스에 저장 될 것이므로 한 번 이상 사용해서는 안됩니다.

Java에서 어떻게 구현할 수 있습니까?

감사합니다.

+0

http://stackoverflow.com/questions/192920/generating-a-globally-unique-identifier-in-java http://download.oracle.com/javase/1,5.0/docs/api/java/ util/UUID.html – Jacob

+0

자동 증가 ID를 사용하지 않으려는 이유는 무엇입니까? –

+2

짐작하기가 어렵습니다. –

답변

4

음 ... 다음과 같이 작은 GUID을 모방 할 수 있습니다. 문자열의 처음 4 바이트를 인코딩 된 현재 시간으로 지정합니다. 유닉스 이후에 초가 전달됩니다. 마지막 4 개는 임의의 조합입니다. 이 경우 두 ID가 일치하는 유일한 방법은 동일한 초에 만들어 졌기 때문입니다. 그리고 그 가능성은 다른 4 개의 무작위 문자 때문에 매우 낮은 것입니다.

의사 코드 :

get current time (4 byte integer 
id[0] = 1st byte of current time (encoded to be a digit or a letter) 
id[1] = 2nd 
id[2] = 3rd 
id[3] = 4th 
id[4] = random character 
id[5] = random character 
id[6] = random character 
id[7] = random character 
0

우리는 이미 존재 여부를 확인하기 위해 데이터베이스를 사용하고 있습니다. 가능한 숫자에 비해 ID 수가 적 으면 상대적으로 안전해야합니다.

UUID 클래스를 볼 수도 있습니다 (16 바이트 UUID 임에도 불구하고).

+0

http://download.oracle.com/javase/1,5.0/docs/api/java/util/UUID.html 도움이 될 수도 있습니다. – lollancf37

+1

@ lollancf37 링크를 추가해 주셔서 감사합니다. 현재 Java 6을 추가하고 싶습니다. 버전 : http://download.oracle.com/javase/6/docs/api/java/util/UUID.html – Thomas

0

hash function과 같은 소리가납니다. 해시 함수가 고유 한 식별자를 반환한다는 것을 100 % 보증하지는 않지만 대부분의 경우 작동합니다. 해시 충돌은 별도로 처리해야하지만 조사해야 할 표준 기술이 많이 있습니다.

특히 충돌을 처리하는 방법은이 고유 식별자를 사용하는 대상에 따라 다릅니다. 프로그램에 ID를 부여하고 데이터를 반환하는 간단한 일방 통행 식별자 인 경우 충돌이 발생할 경우 사용 가능한 다음 ID 만 사용하면됩니다. 나는 아르 멘의 솔루션 @ 시도

1

그러나 나는 다른 해결책을

UUID idOne = UUID.randomUUID(); 
UUID idTwo = UUID.randomUUID(); 
UUID idThree = UUID.randomUUID(); 
UUID idFour = UUID.randomUUID(); 

String time = idOne.toString().replace("-", ""); 
String time2 = idTwo.toString().replace("-", ""); 
String time3 = idThree.toString().replace("-", ""); 
String time4 = idFour.toString().replace("-", ""); 

StringBuffer data = new StringBuffer(); 
data.append(time); 
data.append(time2); 
data.append(time3); 
data.append(time4); 

    SecureRandom random = new SecureRandom(); 
int beginIndex = random.nextInt(100);  //Begin index + length of your string < data length 
int endIndex = beginIndex + 10;   //Length of string which you want 

String yourID = data.substring(beginIndex, endIndex); 

희망이 도움을주고 싶습니다!

관련 문제