허용되는 답변 외에도 경우에 따라 유용 할 수있는 세 번째 옵션이 있습니다.
임의의 MAC이있는 v1 ( "v1mc")
임의의 브로드 캐스트 MAC 주소를 사용하여 의도적으로 v1 UUID를 생성하여 v1과 v4간에 하이브리드를 만들 수 있습니다 (v1 사양에서 허용됨). 결과 v1 UUID는 시간에 따라 다르지만 (일반 v1과 같지만) v4와 같은 모든 호스트 관련 정보가 없습니다. v1mc = 60 비트 시간 + 61 개의 랜덤 비트 = 121 개의 고유 비트; v4 = 122 개의 랜덤 비트.
처음에 이것이 Postgres의 uuid_generate_v1mc () 함수였습니다. 그 후 다음과 같은 파이썬을 사용했습니다.
from os import urandom
from uuid import uuid1
_int_from_bytes = int.from_bytes # py3 only
def uuid1mc():
# NOTE: The constant here is required by the UUIDv1 spec...
return uuid1(_int_from_bytes(urandom(6), "big") | 0x010000000000)
(참고 : UUID 객체를 직접 만드는 더 길고 빠른 버전이 있습니다. 원하는 경우 게시 할 수 있습니다)
대량의 호출 / 초의 경우 시스템 임의성이 소진 될 가능성이 있습니다. 당신은 할 수 다음 stdlib 사용 random
(아마도 빨라집니다) 대신 모듈. 그러나 경고 : 공격자가 RNG 상태를 파악하여 향후 UUID를 부분적으로 예측하려면 수백 개의 UUID 만 있으면됩니다.
import random
from uuid import uuid1
def uuid1mc_insecure():
return uuid1(random.getrandbits(48) | 0x010000000000)