Telegram Group & Telegram Channel
Знаете ли вы, что такое UUID на самом деле или при чём тут RFC 4122?

В документации Apple сказано, что UUID это универсальное уникальное значение для идентификации типов, интерфейсов и других элементов. Но что, если я скажу вам, что оно не такое уж уникальное?

Шанс сгенерировать один и тот же идентификатор дважды на любом устройстве планеты практически равен нулю! Ключевое слово здесь — практически, и ниже я попытаюсь рассказать, почему.

В Swift мы можем создать UUID довольно просто:

let identifier = UUID()
print(identifier)


Результатом будут 128 случайно сгенерированных битов (если вы хотите вывести значение строки, то можно использовать identifier.uuidString).

Но так ли они случайны?

Для этого мы можем обратиться к стандарту RFC 4122, который содержит целых 5 различных подходов к созданию этих идентификаторов.

UUID — это просто 128-битные числа, используемые для уникальной идентификации элементов при разработке ПО. Их каноническое текстовое представление это пять групп шестнадцатеричных символов, разделённых дефисами: 8-4-4-4-12.

Что-то вроде: 3422b448-2460-4fd2-9183-8000de6f8343 (подозреваю, что вы где-то такое уже видели).

В эту, на первый взгляд, случайную серию шестнадцатеричных символов встроена информация о реализации UUID.

xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx

Значения на позициях M и N однозначно определяют версию и вариант UUID.

Версия

Номер версии идентифицируется путем просмотра старших 4 битов значения в позиции M

Вариант

Поле варианта определяет расположение информации, встроенной в UUID. Интерпретация всех остальных битов в UUID зависит от значения варианта.

😎 В iOS нас больше всего интересует RFC 2144 версии 4
Более ранние версии универсальных уникальных идентификаторов полагались на дату и время, MAC-адрес устройства и идентификаторы namespace (можно прочесть ниже).

Всякий раз, когда структура UUID генерирует новый идентификатор, она в основном делает 122 броска кубика (или костей 😅), чтобы получить 122 случайных бита. Остальные ведь нужны нам для идентификации версии и варианта, помните?

Немного математики говорит нам, что всего у нас 3 ундециллиона идентификаторов, или 5,3 триллионов триллионов триллионов (ладно, чтобы было проще 5.3 и 36 нулей). ЭТО МНОГО!

Количество идентификаторов, которые необходимо сгенерировать, чтобы иметь 50-процентную вероятность коллизии (т. е. два одинаковых идентификатора), составляет 2,71 квинтиллиона, или 2,71 в 1018 степени. А я говорил, что они не на 100% уникальны!

На это потребуется 85 лет, если вы будете генерировать 1 миллиард идентификаторов в секунду.

Внимание, спойлер финальной серии сериала «Лучше звоните Солу»!

📺 Почти столько же, сколько дали Солу, чёрт возьми!

Чтобы сохранить все эти идентификаторы, вы должны создать файл размером около 45 экзабайт или 45 миллионов терабайт, что намного больше, чем самые большие БД в мире.

UUID является универсально уникальным для всех устройств, баз данных, iPhone и т. д. в мире. Вероятность создания одного и того же UUID дважды ничтожно мала (но есть).

Остальные версии UUID

1️⃣ Версия 1. На основе времени + уникальный или случайный идентификатор хоста

2️⃣ Версия 2 (безопасность распределенной вычислительной среды) — менее распространена, чем первая, юзает некий специальный идентификатор, уникальный для системы.

3️⃣ Версия 3. На основе имени + хэш MD5.

4️⃣ Версия 4. PRNG (аббревиатура pseudo-random number generator). Использует большинство современных языков программирования.

5️⃣ На основе имени + хэш SHA-1.

По традиции для расширения кругозора можно прочесть следующее

📖 Документация Apple
📖 How To Generate a Random Unique Identifier
📖 Understanding How UUIDs Are Generated
📖 RFC 4122

@iOS Dev — есть вероятность, что посты отсюда вы ещё где-то увидите 😁
🔥35👍7😱4❤‍🔥3🤯2🤩1



tg-me.com/iosdev/539
Create:
Last Update:

Знаете ли вы, что такое UUID на самом деле или при чём тут RFC 4122?

В документации Apple сказано, что UUID это универсальное уникальное значение для идентификации типов, интерфейсов и других элементов. Но что, если я скажу вам, что оно не такое уж уникальное?

Шанс сгенерировать один и тот же идентификатор дважды на любом устройстве планеты практически равен нулю! Ключевое слово здесь — практически, и ниже я попытаюсь рассказать, почему.

В Swift мы можем создать UUID довольно просто:

let identifier = UUID()
print(identifier)


Результатом будут 128 случайно сгенерированных битов (если вы хотите вывести значение строки, то можно использовать identifier.uuidString).

Но так ли они случайны?

Для этого мы можем обратиться к стандарту RFC 4122, который содержит целых 5 различных подходов к созданию этих идентификаторов.

UUID — это просто 128-битные числа, используемые для уникальной идентификации элементов при разработке ПО. Их каноническое текстовое представление это пять групп шестнадцатеричных символов, разделённых дефисами: 8-4-4-4-12.

Что-то вроде: 3422b448-2460-4fd2-9183-8000de6f8343 (подозреваю, что вы где-то такое уже видели).

В эту, на первый взгляд, случайную серию шестнадцатеричных символов встроена информация о реализации UUID.

xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx

Значения на позициях M и N однозначно определяют версию и вариант UUID.

Версия

Номер версии идентифицируется путем просмотра старших 4 битов значения в позиции M

Вариант

Поле варианта определяет расположение информации, встроенной в UUID. Интерпретация всех остальных битов в UUID зависит от значения варианта.

😎 В iOS нас больше всего интересует RFC 2144 версии 4
Более ранние версии универсальных уникальных идентификаторов полагались на дату и время, MAC-адрес устройства и идентификаторы namespace (можно прочесть ниже).

Всякий раз, когда структура UUID генерирует новый идентификатор, она в основном делает 122 броска кубика (или костей 😅), чтобы получить 122 случайных бита. Остальные ведь нужны нам для идентификации версии и варианта, помните?

Немного математики говорит нам, что всего у нас 3 ундециллиона идентификаторов, или 5,3 триллионов триллионов триллионов (ладно, чтобы было проще 5.3 и 36 нулей). ЭТО МНОГО!

Количество идентификаторов, которые необходимо сгенерировать, чтобы иметь 50-процентную вероятность коллизии (т. е. два одинаковых идентификатора), составляет 2,71 квинтиллиона, или 2,71 в 1018 степени. А я говорил, что они не на 100% уникальны!

На это потребуется 85 лет, если вы будете генерировать 1 миллиард идентификаторов в секунду.

Внимание, спойлер финальной серии сериала «Лучше звоните Солу»!

📺 Почти столько же, сколько дали Солу, чёрт возьми!

Чтобы сохранить все эти идентификаторы, вы должны создать файл размером около 45 экзабайт или 45 миллионов терабайт, что намного больше, чем самые большие БД в мире.

UUID является универсально уникальным для всех устройств, баз данных, iPhone и т. д. в мире. Вероятность создания одного и того же UUID дважды ничтожно мала (но есть).

Остальные версии UUID

1️⃣ Версия 1. На основе времени + уникальный или случайный идентификатор хоста

2️⃣ Версия 2 (безопасность распределенной вычислительной среды) — менее распространена, чем первая, юзает некий специальный идентификатор, уникальный для системы.

3️⃣ Версия 3. На основе имени + хэш MD5.

4️⃣ Версия 4. PRNG (аббревиатура pseudo-random number generator). Использует большинство современных языков программирования.

5️⃣ На основе имени + хэш SHA-1.

По традиции для расширения кругозора можно прочесть следующее

📖 Документация Apple
📖 How To Generate a Random Unique Identifier
📖 Understanding How UUIDs Are Generated
📖 RFC 4122

@iOS Dev — есть вероятность, что посты отсюда вы ещё где-то увидите 😁

BY iOS Dev


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/iosdev/539

View MORE
Open in Telegram


telegram Telegram | DID YOU KNOW?

Date: |

A project of our size needs at least a few hundred million dollars per year to keep going,” Mr. Durov wrote in his public channel on Telegram late last year. “While doing that, we will remain independent and stay true to our values, redefining how a tech company should operate.

To pay the bills, Mr. Durov is issuing investors $1 billion to $1.5 billion of company debt, with the promise of discounted equity if the company eventually goes public, the people briefed on the plans said. He has also announced plans to start selling ads in public Telegram channels as soon as later this year, as well as offering other premium services for businesses and users.

telegram from us


Telegram iOS Dev
FROM USA