답변:
Java 5 이상에 번들로 제공되는 UUID 클래스를 살펴보십시오 .
예를 들면 다음과 같습니다.
java.util.UUID.randomUUID();
UUID.randomUUID
메소드가 복제본을 반환하는 것이 가능 하지만 이것은 실제로 현실적인 문제 는 아닙니다 . Oracle / OpenJDK 구현은 강력한 암호화 난수 생성기를 사용합니다. 이를 감안할 때 UUID에 너무 많은 비트가 제공하는 천문학적 범위가 주어지면 앱에서 수백만 개의 이러한 값을 생성하고 여전히 잘 수 있습니다. 다른 변형 중 하나를 사용하면 "공간 및 시간", [1] MAC 주소 또는 이름 및 [2] 현재 날짜-시간을 제약 조건으로 사용하므로 충돌 가능성이 0에 더 가깝게 줄어 듭니다.
while
를 얻을 때까지 새 ID를 생성 합니다.
원하는 UUID 종류에 따라 다릅니다 .
표준 Java UUID
클래스는 버전 4 (임의) UUID를 생성 합니다. ( 업데이트 - 버전 3 (이름) UUID도 생성 할 수 있습니다.) 다른 변형도 생성 할 수는 없지만 처리 할 수 있습니다. (이 경우, "핸들"수단 구성체 UUID
로부터 인스턴스 long
, byte[]
또는 String
표현, 그리고 어떤 적절한 접근을 제공한다.)
자바 UUID 생성기 (주전자) '에 의해 정의 된 UUID의 3'공식 '유형을 구현 취지는 지원 -4122 RFC 은 RFC 실제로 4 가지 유형을 정의하고 5 유형을 언급하지만 ... ".
UUID 유형 및 변형에 대한 자세한 내용은 Wikipedia에 요약되어 있으며 세부 사항은 RFC 4122 및 기타 사양에 있습니다.
UUID.nameUUIDFromBytes(byte[] name)
public static UUID nameUUIDFromBytes(byte[] name)
. 유형 4의 경우 public static UUID randomUUID()
. JDK 클래스에는 유형 1을 사용할 수 없습니다.
clockSequence()
Java 내 에서 UUID 값을 생성하는 것은 보안 문제로 인해 버전 4 (임의)로 제한됩니다 .
다른 버전의 UUID를 원하는 경우 다음 중 하나 를 호출 하여 Java 앱이 JVM 외부에 도달 하여 UUID를 생성하도록 할 수 있습니다.
uuidgen
Mac OS X, BSD 및 Linux에 있습니다.uuid-ossp
uuid_generate_v1mc()
– 버전 1 UUID를 생성하지만 컴퓨터의 실제 MAC 주소 대신 임의의 멀티 캐스트 MAC 주소를 사용합니다.uuid_generate_v5(namespace uuid, name text)
– SHA-1이 해싱 방법으로 사용되는 것을 제외하고 버전 3 UUID와 같은 버전 5 UUID를 생성합니다.