UUID означает Универсальный уникальный идентификатор. Это 128-битное значение, которое используется для идентификации информации в компьютерных системах.
В RFC 4122 определено пять версий UUID, но чаще всего используются версии uuid1
и uuid4
.
Что такое UUID1 и UUID4?
uuid1
генерирует UUID на основе текущей временной метки системы и MAC-адреса компьютера, а uuid4
генерирует UUID с использованием случайных чисел.
Как сгенерировать uuid1
и uuid4
в коде Python?
import uuid # Generate a UUID1 string for i in range(3): uuid1_str = str(uuid.uuid1()) print("UUID1 string:", uuid1_str) # Generate a UUID4 string for i in range(3): uuid4_str = str(uuid.uuid4()) print("UUID4 string:", uuid4_str)
Вот результаты
UUID1 string: 6c271540-1bcf-11ee-b999-aa665a44b56e UUID1 string: 6c27170c-1bcf-11ee-b999-aa665a44b56e UUID1 string: 6c2717a2-1bcf-11ee-b999-aa665a44b56e UUID4 string: 83ee0a78-7b53-4c46-9e01-5f7bebd6963f UUID4 string: eb500027-b07b-4315-9b2c-030a09f520df UUID4 string: 49a28f00-e59b-43d8-b14f-f9d3a8ee165a
Могу ли я изменить строку uuid1, чтобы получить исходную временную метку и MAC-адрес?
Да, вот код Python
import uuid import datetime def uuid_to_time_and_mac(uuid_string): uuid_obj = uuid.UUID(uuid_string) timestamp = (uuid_obj.time - 0x01b21dd213814000) * 100 / 1e9 mac = uuid_obj.node.to_bytes(6, 'big') mac_str = ':'.join(['{:02x}'.format(b) for b in mac]) time = datetime.datetime.fromtimestamp(timestamp) return time, mac_str us = ['6c271540-1bcf-11ee-b999-aa665a44b56e', '6c27170c-1bcf-11ee-b999-aa665a44b56e', '6c2717a2-1bcf-11ee-b999-aa665a44b56e'] for u in us: d = uuid_to_time_and_mac(u) print("Time is %s, MAC is %s" %(d[0],d[1]))
И результаты
Time is 2023-07-06 15:33:38.174496, MAC is aa:66:5a:44:b5:6e Time is 2023-07-06 15:33:38.174542, MAC is aa:66:5a:44:b5:6e Time is 2023-07-06 15:33:38.174557, MAC is aa:66:5a:44:b5:6e
Какова вероятность столкновения двух UUID1?
UUID1 генерируется на основе метки времени и MAC-адреса, поэтому существует вероятность коллизии при создании UUID1 на одном компьютере. В частности, если на одном компьютере сгенерированы два UUID1 с одинаковой отметкой времени и MAC-адресом, они будут конфликтовать.
Однако из-за использования временной метки в 100 наносекунд и 48-битного MAC-адреса вероятность коллизии очень мала. В частности, если UUID1 генерируются каждые 100 наносекунд на одном и том же компьютере, потребуется около 89 лет, чтобы вероятность столкновения достигла 50%.
Поэтому UUID1 обычно считается достаточно уникальным для большинства целей.