Генераторы онлайн: случайные числа, пароли, QR-коды
Генераторы онлайн: случайные числа, пароли, QR-коды
Бесплатные онлайн-генераторы данных — набор инструментов, которые создают нужные значения мгновенно и без регистрации. Все генераторы работают локально в вашем браузере: случайные числа, надёжные пароли, QR-коды для ссылок и визиток, уникальные идентификаторы UUID. Никакие данные не отправляются на сервер — всё происходит прямо на устройстве, быстро и бесплатно.
В этой статье мы подробно разберём каждый инструмент: как он устроен внутри, на каких математических принципах основан, в каких ситуациях применять и какие настройки действительно важны.
Генератор случайных чисел
Генератор случайных чисел (рандомайзер) — это инструмент, который выдаёт непредсказуемый результат в заданных границах. В отличие от псевдослучайных последовательностей вроде `Math.random()`, наш генератор использует криптографически стойкий источник энтропии `crypto.getRandomValues()`, что делает результаты по-настоящему непредсказуемыми.
Чем случайность отличается от псевдослучайности
Ключевое различие — в источнике энтропии:
Псевдослучайные генераторы (PRNG) — такие как `Math.random()`, `rand()` в C, `random()` в Python — используют математический алгоритм (обычно линейный конгруэнтный генератор или Вихрь Мерсенна) и начальное число (seed). Если вы знаете seed, вы можете воспроизвести всю последовательность. Более того, зная несколько последовательных результатов PRNG, злоумышленник может вычислить внутреннее состояние и предсказать следующие значения.
Криптографически стойкие генераторы (CSPRNG) — такие как `crypto.getRandomValues()` в браузере, `/dev/urandom` в Linux, `CryptGenRandom` в Windows — собирают энтропию из физических источников: тайминги между нажатиями клавиш, движения мыши, сетевые пакеты, аппаратные прерывания, тепловой шум процессора. CSPRNG проходит следующий битовый тест: зная произвольное количество предыдущих битов, нельзя предсказать следующий бит с вероятностью выше 50%. Это требование formally доказано для используемых алгоритмов (ChaCha20, AES-CTR).
Типы генерации
Наш рандомайзер поддерживает пять режимов, каждый для своей задачи:
- Случайное число — укажите минимум и максимум, получите целое или дробное число в диапазоне. Диапазон может быть любым: от −1 000 000 до 1 000 000 и шире. Целые числа генерируются с равномерной вероятностью; для дробных можно указать количество знаков после запятой.
- Да/Нет — бинарный выбор для принятия решений. Вероятность каждого исхода — ровно 50%, результат не зависит от предыдущих бросков. Используется для устранения паралича выбора, когда вы застреваете между двумя равноценными вариантами.
- Игральный кубик — бросьте один или несколько кубиков. Поддерживаются все стандартные типы: d4, d6, d8, d10, d12, d20, d100. Можно бросить любое количество кубиков — от одного до сотни. Сумма нескольких кубиков подчиняется нормальному распределению (центральная предельная теорема): средние значения выпадают значительно чаще крайних.
- Случайная карта — вытяните карту из стандартной колоды (52 карты, 4 масти, от двойки до туза). Каждая следующая карта вытягивается из оставшейся колоды — без повторений, пока колода не опустеет. Вероятность вытянуть конкретную карту меняется с каждым ходом — это гипергеометрическое распределение.
- Случайный элемент списка — введите свои варианты (каждый с новой строки или через запятую), и рандомайзер выберет один. Удобно для розыгрышей, распределения задач, выбора победителя. Поддерживается любой текст, включая эмодзи и символы Unicode.
Как это работает: математика равномерного распределения
Генератор строит равномерное распределение — каждый возможный исход имеет одинаковую вероятность. Формула для случайного целого числа в диапазоне `[min, max]`:
X = min + ⌊random × (max − min + 1)⌋
Где `random` — случайное число в интервале `[0, 1)`, полученное из `crypto.getRandomValues()` и нормализованное делением на `2^32`. Для дробных чисел формула:
X = min + random × (max − min)
При броске N кубиков с M гранями общее количество исходов равно `M^N`. Например, для двух шестигранных кубиков (2d6) — 36 возможных комбинаций, от 2 до 12. Вероятность конкретной суммы:
P(сумма = S) = количество комбинаций, дающих S / 36
Распределение для 2d6:
| Сумма | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | |-------|---|---|---|---|---|---|---|----|----|----| | Комбинаций | 1 | 2 | 3 | 4 | 5 | 6 | 5 | 4 | 3 | 2 | 1 | | Вероятность | 2.8% | 5.6% | 8.3% | 11.1% | 13.9% | 16.7% | 13.9% | 11.1% | 8.3% | 5.6% | 2.8% |
Сумма 7 — самая вероятная (6 комбинаций из 36), а 2 и 12 — самые редкие. Это объясняет, почему в настольных играх события со сложностью 7 происходят чаще всего.
Вероятность вытянуть туза из колоды при первом вытягивании — `4/52 ≈ 7.7%`. При последовательном вытягивании без возврата (гипергеометрическое распределение) вероятность меняется. Если первые 10 карт не были тузами, шанс вытянуть туза одиннадцатым становится `4/42 ≈ 9.5%`. Если один туз уже вытянут — `3/42 ≈ 7.1%`.
Сценарии использования генератора случайных чисел
- Розыгрыши и конкурсы — объективный выбор победителя из списка участников. В отличие от субъективного выбора, случайный результат исключает предвзятость и выглядит честно для всех участников. Достаточно скопировать список имён и нажать «Выбрать».
- Случайная выборка (random sampling) — отбор респондентов для опроса, пользователей для A/B-тестирования, контрольной группы для медицинского эксперимента. Критически важно: выборка должна быть действительно случайной, иначе результаты эксперимента не будут статистически значимыми.
- Настольные и ролевые игры — замена физическим кубикам. Поддержка всех типов (d4 для кинжалов, d6 для мечей, d8 для луков, d10 для заклинаний, d20 для проверок навыков, d100 для таблиц случайных событий) делает рандомайзер универсальным инструментом для любого RPG-мастера.
- A/B-тестирование — распределение пользователей по вариантам: 50/50, 70/30, многорукий бандит с несколькими вариантами. Случайное распределение — базовое требование для корректного A/B-теста; без него результаты будут смещены.
- Генерация тестовых данных — заполнение базы случайными значениями в заданных диапазонах для нагрузочного тестирования. Создайте 10 000 пользователей с возрастами от 18 до 75, зарплатами от 30 000 до 300 000, и случайными ролями.
- Принятие решений — подбросьте монетку (режим Да/Нет), когда застряли между двумя равноценными вариантами. Исследования показывают: сам факт подбрасывания монетки помогает — в момент броска вы часто осознаёте, какой результат вы на самом деле хотите увидеть.
Гистограмма распределения: почему это важно
Каждый сгенерированный результат попадает на гистограмму, которая показывает реальное распределение значений. Это не просто визуализация — это инструмент проверки качества генератора.
При 10 бросках распределение может быть хаотичным — например, 4 раза выпало «орёл» и 6 раз «решка». При 100 бросках разброс уменьшается: 45–55. При 10 000 бросках распределение практически идеальное: 4 980–5 020. Это закон больших чисел в действии: чем больше испытаний, тем ближе эмпирическая частота к теоретической вероятности.
Гистограмма позволяет вам лично убедиться, что генератор не «подкручен». Откройте инструмент, сделайте 1000 бросков кубика — все грани должны выпасть примерно по 167 раз каждая.
Часто задаваемые вопросы
Насколько случайны результаты?
Мы используем `crypto.getRandomValues()` — криптографически стойкий генератор псевдослучайных чисел (CSPRNG) на основе ChaCha20, встроенный в каждый современный браузер. Энтропия собирается из десятков источников. Для любых практических задач — розыгрыши, игры, эксперименты, A/B-тесты — этого более чем достаточно. CSPRNG неотличим от истинно случайной последовательности для любого наблюдателя с конечными вычислительными ресурсами.
Можно ли предсказать следующее число?
Нет. CSPRNG спроектирован так, что знание предыдущих N результатов не даёт никакой информации о результате N+1. Это formally гарантировано криптографическими свойствами ChaCha20. В отличие от `Math.random()`, чьё состояние можно восстановить по последовательности из 5–10 значений с помощью Z3-солвера.
Чем ваш генератор отличается от других?
Главное отличие — прозрачность. Вы видите реальное распределение результатов на гистограмме и можете сами проверить его равномерность. Исходный код открыт, генерация происходит локально в браузере — ни одна кость не улетает на сервер. Кроме того, мы поддерживаем нестандартные кубики (d8, d10, d12, d20, d100), которые редко встречаются в онлайн-рандомайзерах.
Нужно ли регистрироваться для использования?
Нет. Все инструменты txtly.ru работают без регистрации, без рекламы и без сбора данных. Открыли страницу — пользуетесь.
Открыть генератор случайных чисел →
Генератор паролей
Генератор паролей — инструмент для создания криптографически стойких паролей, устойчивых к перебору (brute-force) и атакам по словарю. В эпоху, когда утечки баз данных происходят ежедневно, использование уникальных и сложных паролей для каждого сервиса — уже не рекомендация, а базовая цифровая гигиена.
Что делает пароль надёжным: два столпа
Надёжный пароль обладает двумя независимыми свойствами:
- Высокая энтропия — большая непредсказуемость, измеряемая в битах. Каждый дополнительный бит энтропии удваивает количество возможных комбинаций и, соответственно, время, необходимое для полного перебора.
- Уникальность — пароль используется только в одном месте. Если база сервиса A утекает, ваш пароль от сервиса B остаётся в безопасности. Это свойство не зависит от сложности: даже очень сложный пароль, использованный на двух сайтах, уязвим при утечке одного из них.
Параметры генерации и как они влияют на стойкость
- Длина пароля (4–128 символов) — самый важный параметр. Каждый дополнительный символ умножает количество комбинаций на размер алфавита. Рекомендация NIST SP 800-63B: минимум 8 символов для пользовательских паролей, 16+ для сервисных учётных записей.
- Заглавные буквы (A–Z, 26 символов) — добавление этого набора удваивает пространство перебора по сравнению с одними строчными. Даже один случайный заглавный символ в середине пароля разрушает шаблон «первая буква заглавная».
- Строчные буквы (a–z, 26 символов) — основа любого пароля, минимально необходимый набор.
- Цифры (0–9, 10 символов) — разрушают словарные атаки, где перебираются только буквы. Пароль из 8 букв имеет 208 миллиардов вариантов; пароль из 8 букв и цифр — 2.8 триллиона.
- Специальные символы (!@#$%^&* и другие, до 32 символов) — наибольший прирост энтропии на один символ. Однако не все сервисы их поддерживают, некоторые ограничивают набор разрешённых спецсимволов.
- Исключение похожих символов — убирает пары, которые легко перепутать: `l` и `1` и `I`, `0` и `O`, `2` и `Z`, `5` и `S`, `8` и `B`. Критически важно для паролей, которые нужно вводить вручную (Wi-Fi, серверная консоль) или диктовать по телефону.
Энтропия пароля: полная формула расчёта
Энтропия измеряется в битах и показывает, сколько бит информации несёт пароль. Формула:
H = L × log₂(N)
Где:
- H — энтропия в битах
- L — длина пароля в символах
- N — размер алфавита (количество возможных символов на каждой позиции)
Количество возможных комбинаций: `K = N^L = 2^H`. Время полного перебора при скорости V попыток в секунду: `T = K / V`.
Практическая таблица для разных конфигураций при скорости перебора 10⁹ попыток в секунду (типичная скорость для GPU-кластера среднего размера):
| Набор символов | N | L=8 | L=12 | L=16 | L=20 |
|---|---|---|---|---|---|
| Только строчные (a–z) | 26 | ~38 бит (мгновенно) | ~56 бит (~1 мин) | ~75 бит (~10 лет) | ~94 бит (~200 000 лет) |
| Строчные + цифры | 36 | ~41 бит (~2 сек) | ~62 бит (~1 час) | ~83 бит (~3 000 лет) | ~103 бит (~10⁸ лет) |
| Буквы оба регистра + цифры | 62 | ~48 бит (~4 мин) | ~71 бит (~4 года) | ~95 бит (~10⁶ лет) | ~119 бит (~10¹³ лет) |
| Полный набор (+ спецсимволы) | 94 | ~52 бит (~1 час) | ~78 бит (~9 000 лет) | ~105 бит (~10¹⁰ лет) | ~131 бит (~10¹⁷ лет) |
Ключевой вывод: длина важнее сложности символов. Пароль из 16 строчных букв (75 бит) защищён лучше, чем пароль из 8 символов с полным алфавитом (52 бита). И его гораздо легче запомнить.
Почему нельзя использовать пароли-паттерны
Человеческий мозг систематически ошибается при генерации «случайных» паролей. Исследования миллионов утёкших паролей показывают устойчивые паттерны:
- Клавиатурные последовательности: `qwerty`, `qwerty123`, `1qaz2wsx`, `zxcvbnm`
- Даты и годы: `1991`, `2000`, `march2020`, `password2024`
- Замена букв на похожие цифры (leetspeak): `p@ssw0rd` вместо `password`, `h4ck3r` вместо `hacker` — атакующие давно включили эти замены в правила перебора
- Добавление `!` или `1` в конец: `password!`, `myname1`, `letmein!` — соответствуют требованию «хотя бы один спецсимвол или цифра», но не добавляют реальной энтропии
- Спортивные команды, имена, бренды: `liverpool`, `starwars`, `nike123`
Все эти паттерны давно учтены в словарях для hashcat и John the Ripper. Правильно сгенерированный пароль `x7Kp-m3Qw_zR9` не содержит никаких осмысленных слов или паттернов.
Связка: генератор паролей + менеджер паролей
Запомнить 50+ уникальных паролей вида `x7Kp-m3Qw_zR9` невозможно — и не нужно. Правильный workflow:
- Сгенерируйте уникальный сложный пароль в нашем генераторе.
- Сохраните его в менеджере паролей (Bitwarden — open-source, 1Password, KeePass, встроенный менеджер Chrome/Safari/Firefox).
- Запомните только один пароль — мастер-пароль от менеджера. Он должен быть длинным (20+ символов), но запоминаемым: используйте метод Diceware — 6–8 случайных слов, разделённых пробелами.
Рекомендации NIST и OWASP
Современные стандарты безопасности (NIST SP 800-63B, 2024) рекомендуют:
- Проверять пароли по базам утечек — даже сложный пароль может быть скомпрометирован, если он уже фигурировал в утечке. Используйте Have I Been Pwned для проверки.
- Не требовать регулярной смены пароля — принудительная смена каждые 90 дней приводит к тому, что пользователи создают более слабые пароли или добавляют счётчик (`MyPass1`, `MyPass2`, `MyPass3`). Меняйте пароль только при подозрении на компрометацию.
- Поощрять длину, а не сложность — 20 случайных строчных букв безопаснее, чем 8 символов со спецсимволами. И пользователям проще.
- Внедрить двухфакторную аутентификацию (2FA) — даже самый надёжный пароль может быть украден через фишинг. 2FA (TOTP, аппаратный ключ) — второй рубеж обороны.
Часто задаваемые вопросы
Какой длины должен быть пароль?
Минимум 12 символов для обычных аккаунтов, 16+ для важных (email, банк, хостинг), 20+ для критических (доменный регистратор, корпоративный VPN). Каждые дополнительные 2–3 символа увеличивают стойкость в сотни раз.
Нужны ли спецсимволы, если пароль длинный?
С математической точки зрения — нет. Пароль из 20 строчных букв имеет энтропию ~94 бита, что более чем достаточно. Но многие сервисы принудительно требуют спецсимволы, поэтому лучше сразу генерировать с полным алфавитом — универсальный пароль пройдёт валидацию на любом сайте.
Безопасно ли генерировать пароли в браузере?
Да. Генерация происходит локально с использованием `crypto.getRandomValues()` — того же API, который используют браузерные менеджеры паролей и криптографические расширения. Сгенерированный пароль не отправляется на сервер, не сохраняется в localStorage и не попадает в логи. После закрытия вкладки он невосстановим.
Можно ли доверять онлайн-генераторам паролей?
Смотря каким. Если генератор отправляет запросы на сервер — нет (сервер может сохранить ваш пароль). Наш генератор работает полностью локально — вы можете отключить интернет, и он продолжит работать. Это можно проверить через DevTools: откройте вкладку Network и убедитесь, что при нажатии «Сгенерировать» не отправляется ни одного запроса.
Что делать, если сервис ограничивает длину пароля?
Некоторые Legacy-системы ограничивают пароль 8, 10 или 12 символами. В этом случае используйте максимально допустимую длину с полным алфавитом. Если ограничение устаревшее (например, 8 символов), включите 2FA — это компенсирует слабость короткого пароля.
QR-код генератор
QR-код (Quick Response Code) — двумерный матричный штрихкод, способный хранить до 4 296 буквенно-цифровых символов или 7 089 цифр. Разработан японской компанией Denso Wave в 1994 году для отслеживания автозапчастей на конвейере. Сегодня QR-коды — самый распространённый способ быстрой передачи данных между физическим и цифровым мирами.
Анатомия QR-кода
QR-код состоит из чёрных и белых модулей (квадратов) на квадратной матрице. Каждая деталь имеет строго определённую функцию:
- Поисковые узоры (Finder Patterns) — три больших квадрата 7×7 модулей в верхних левом, правом и нижнем левом углах. Сканер находит эти три квадрата, определяет ориентацию кода и корректирует перспективные искажения. Четвёртый угол сознательно оставлен пустым — это позволяет сканеру отличить верх от низа.
- Выравнивающие узоры (Alignment Patterns) — маленькие квадраты 5×5, появляются начиная с версии 2 (матрица 25×25). Помогают восстановить геометрию кода при печати на неровной поверхности или съёмке под углом. Чем больше версия, тем больше выравнивающих узоров.
- Синхронизирующие полосы (Timing Patterns) — чередующиеся чёрные и белые модули между поисковыми узорами. По ним сканер определяет размер одного модуля и общий размер матрицы.
- Информация о формате и версии — закодированные биты рядом с поисковыми узорами. Содержат уровень коррекции ошибок, маску данных и версию кода.
- Данные и код коррекции — полезная нагрузка (ваш URL или текст) и избыточный код Рида-Соломона для восстановления при повреждениях.
Уровни коррекции ошибок и код Рида-Соломона
Коррекция ошибок — ключевая технология QR-кода. Используется алгоритм Рида-Соломона: к исходным данным добавляются избыточные символы, позволяющие восстановить утраченные байты. Четыре уровня:
| Уровень | Восстановление | Когда использовать |
|---|---|---|
| L (Low) | ~7% | Экраны, веб, цифровое отображение — чистые условия |
| M (Medium) | ~15% | Печать: визитки, флаеры, меню (рекомендуемый для большинства) |
| Q (Quartile) | ~25% | Наружная реклама, упаковка, места с вероятными повреждениями |
| H (High) | ~30% | Промышленная маркировка, грязные среды, наложение логотипа |
Более высокий уровень коррекции делает QR-код крупнее (больше избыточных данных), но устойчивее. Интересный эффект: при уровне H вы можете наложить логотип на центр QR-кода, и код останется читаемым — избыточные данные компенсируют закрытую область. Для большинства задач мы рекомендуем уровень M — хороший баланс размера и надёжности.
Объём данных: что помещается в QR-код
Максимальная ёмкость зависит от версии (размера матрицы) и уровня коррекции. Таблица для версии 40 (177×177 модулей, максимальная):
| Тип данных | Макс. символов (L) | Макс. символов (H) |
|---|---|---|
| Цифры | 7 089 | 3 052 |
| Буквы и цифры | 4 296 | 1 850 |
| Бинарные данные (байты) | 2 953 | 1 273 |
| Кандзи (Shift JIS) | 1 817 | 782 |
Для типичного URL (30–50 символов) достаточно младших версий QR-кода с матрицей 21×21 или 25×25 — маленький, быстрый для сканирования, отлично читается.
Форматы данных: не только ссылки
QR-код может кодировать разные типы данных. Наш генератор поддерживает:
- Простой текст или URL — универсальный вариант. Если текст начинается с `http://` или `https://`, сканер автоматически предложит открыть браузер.
- Контактные данные (vCard) — формат:
При сканировании телефон сохраняет контакт в адресную книгу. Идеально для визиток.BEGIN:VCARD VERSION:3.0 FN:Иван Петров TEL:+79161234567 EMAIL:ivan@example.com URL:https://example.com END:VCARD - Wi-Fi — формат:
При сканировании смартфон подключается к сети без ручного ввода пароля. Отлично для гостевого Wi-Fi в кафе, офисах, на мероприятиях.WIFI:S:МояСеть;T:WPA;P:мойпароль;; - Геолокация — `geo:55.7558,37.6173` — открывает карты с указанной точкой.
- Событие в календарь — ссылка на `.ics` или Google Calendar.
Сценарии использования QR-кода
- Визитки и нетворкинг — один QR-код с vCard заменяет стопку бумажных визиток. При личной встрече человек сканирует код и сохраняет ваш контакт в телефон за 5 секунд.
- Меню ресторана — QR-код на столике ведёт на онлайн-меню. Не нужно перепечатывать меню при изменении цен или состава блюд. Гости смотрят меню на своих телефонах, что особенно актуально в постковидном мире.
- Оплата — ссылка на платёжную страницу. Работает с СБП, интернет-эквайрингом, платёжными агрегаторами. Удобно для самозанятых, небольших магазинов, донатов.
- Wi-Fi для гостей — табличка с QR-кодом на ресепшене или в гостевой зоне. Гости подключаются без вопросов «какой у вас пароль от Wi-Fi».
- Маркировка товаров и логистика — серийные номера, ссылки на инструкции по эксплуатации, гарантийные талоны, отслеживание посылок. Изначально именно для этого QR-коды и создавались.
- Билеты и посадочные талоны — авиабилеты, билеты на концерты и в театры. QR-код содержит номер бронирования и верификационный код.
- Образовательные материалы — QR-код в учебнике ведёт на видео-демонстрацию опыта или интерактивное упражнение.
Часто задаваемые вопросы
Какой уровень коррекции выбрать?
Для экранов и веба — L (компактный код). Для печати — M (рекомендуемый, хороший баланс). Для наружной рекламы и упаковки — Q или H. Если планируете добавить логотип в центр — обязательно H.
Можно ли добавить логотип в центр QR-кода?
Да. Скачайте наш QR-код в PNG или SVG и добавьте логотип в любом редакторе. При уровне коррекции H логотип может закрывать до 30% площади кода. Важно: после добавления логотипа обязательно протестируйте читаемость с нескольких телефонов и под разными углами. Иногда контраст логотипа мешает сканированию — в этом случае добавьте белую рамку вокруг логотипа.
Есть ли срок годности у QR-кода?
Сам код не имеет срока годности — он просто кодирует данные. Но если внутри закодирован URL, а сайт изменил структуру — код перестанет работать. Для долгосрочного использования настройте редирект на вашем сайте или используйте собственную короткую ссылку, адрес которой можно изменить.
Какой минимальный размер для печати?
Рекомендуемый минимум — 2 × 2 см при 300 dpi. Меньший размер приводит к тому, что камера телефона не может различить отдельные модули. Чем выше версия QR-кода (больше матрица) — тем крупнее должен быть отпечаток.
PNG или SVG — что выбрать?
PNG — для экранов: веб-сайты, презентации, email-подписи, мессенджеры. SVG — для печати: визитки, флаеры, баннеры, упаковка. SVG можно масштабировать до размера билборда без потери качества. Для большинства задач мы рекомендуем скачать оба формата.
Почему ваш QR-генератор лучше других?
Никаких водяных знаков, никаких рекламных логотипов в коде, открытый исходный код, генерация локально в браузере, выбор между PNG и SVG, выбор уровня коррекции, возможность закодировать любой текст — не только URL, но и vCard, Wi-Fi, геолокацию.
UUID/GUID генератор
UUID (Universally Unique Identifier) — 128-битный идентификатор, стандартизированный в RFC 9562 (ранее RFC 4122). UUID позволяет создавать глобально уникальные идентификаторы без централизованной службы выдачи и без координации между системами. Это фундаментальная технология распределённых систем.
Зачем нужен UUID
В централизованной системе база данных сама выдаёт ID: `INSERT` возвращает очередной номер (1, 2, 3...). В распределённой системе этот подход ломается:
- Два сервера одновременно создают записи с ID=42 — конфликт.
- Сервер не может сгенерировать ID без запроса к мастер-базе — bottleneck.
- Мобильное приложение без интернета не может создать запись — ID не назначить.
UUID решает все три проблемы. Каждый узел генерирует ID самостоятельно, и вероятность конфликта пренебрежимо мала.
Формат UUID
UUID записывается как 36 символов: `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`, где `x` — шестнадцатеричная цифра (0–9, a–f). Пример:
550e8400-e29b-41d4-a716-446655440000
Разбор структуры UUID v4 (наиболее популярной версии):
| Поле | Размер | Содержимое |
|---|---|---|
| time_low | 32 бита (8 hex) | Случайные биты |
| time_mid | 16 бит (4 hex) | Случайные биты |
| time_hi_and_version | 16 бит (4 hex) | Биты 12–15: версия `0100` (v4). Биты 0–11: случайные |
| clock_seq_hi_and_reserved | 8 бит (2 hex) | Биты 6–7: вариант `10`. Биты 0–5: случайные |
| clock_seq_low | 8 бит (2 hex) | Случайные биты |
| node | 48 бит (12 hex) | Случайные биты |
Итоговая энтропия UUID v4: 122 случайных бита (128 минус 6 фиксированных бит версии и варианта). Количество возможных комбинаций:
2^122 ≈ 5 316 911 983 139 663 491 615 228 241 121 400 000
Это число примерно равно количеству атомов в 10 000 планетах Земля. Вероятность коллизии при генерации 1 миллиарда UUID в секунду в течение 100 лет — менее `10^-15`, то есть практически ноль.
Сравнение версий UUID
Стандарт определяет 8 версий UUID. Каждая решает свою задачу:
| Версия | Принцип | Плюсы | Минусы |
|---|---|---|---|
| v1 | MAC-адрес + время | Упорядоченность по времени | Раскрывает MAC-адрес и время создания |
| v2 | DCE Security | Привязка к UID/GID | Устарела, практически не используется |
| v3 | MD5(namespace + name) | Детерминированный: один вход → один UUID | MD5 считается слабым |
| v4 | 122 случайных бита | Максимальная непредсказуемость, нет утечки информации | Не упорядочены — фрагментируют B-tree индексы |
| v5 | SHA-1(namespace + name) | Детерминированный, как v3, но безопаснее | Менее распространён |
| v6 | Поле времени в начале | Упорядоченность, дружественная к индексам | Менее распространён, чем v4 |
| v7 | Unix timestamp + случайные биты | Идеален для БД: упорядоченность + уникальность | Рекомендован для новых проектов (RFC 9562) |
| v8 | Свободный формат | Экспериментальное использование | Пока редко используется |
Для большинства задач UUID v4 — оптимальный выбор. Он не раскрывает время создания или MAC-адрес, генерируется тривиально (не требует координации), и вероятность коллизии пренебрежимо мала. Если вы проектируете новую базу данных и вам важна производительность индексов — рассмотрите UUID v7.
UUID в базах данных: практические нюансы
Не все СУБД одинаково хорошо работают с UUID:
PostgreSQL — нативный тип `UUID` (16 байт). Индексы работают эффективно, есть встроенные функции `gen_random_uuid()`. UUID v4 фрагментирует B-tree индексы из-за случайного порядка, но для большинства проектов это не критично. Для высоконагруженных систем используйте UUID v7 или `uuid_generate_v7()` из расширения `pg_uuidv7`.
MySQL/MariaDB — нативного типа UUID нет. Хранение как `CHAR(36)` — 36 байт вместо 16, индексы страдают. Рекомендация: хранить UUID как `BINARY(16)` с конвертацией через `UUID_TO_BIN()` и `BIN_TO_UUID()`. Это уменьшает размер в 2.25 раза и улучшает производительность индексов.
SQLite — нет нативного типа UUID. Храните как `TEXT` (36 байт) или `BLOB` (16 байт). Для небольших проектов разница несущественна.
MongoDB — использует ObjectID (12 байт) по умолчанию, но UUID (как строку или BinData) тоже поддерживает.
Когда использовать UUID, а когда автоинкремент
| Критерий | UUID | Автоинкремент |
|---|---|---|
| Распределённые системы | ✅ Идеально | ❌ Конфликты ID |
| Микросервисы | ✅ Каждый сервис независим | ❌ Нужна координация |
| Публичные API | ✅ Не раскрывает количество записей | ❌ `/users/42` → `/users/43` |
| Синхронизация данных | ✅ Нет конфликтов при слиянии | ❌ Конфликты ID |
| Офлайн-работа | ✅ Генерация без сети | ❌ Нужен доступ к БД |
| Производительность индексов | ⚠️ Фрагментация B-tree | ✅ Последовательные, идеально |
| Читаемость для человека | ❌ `550e8400-e29b-...` | ✅ `42`, `128` |
| Размер в БД | ⚠️ 16 байт (или 36) | ✅ 4–8 байт |
Часто задаваемые вопросы
Могут ли два UUID v4 совпасть?
Математически — да. Практически — нет, с вероятностью, граничащей с невозможностью. Вы скорее угадаете секретный ключ биткоин-кошелька три раза подряд, чем столкнётесь с коллизией UUID v4 при нормальной эксплуатации. Для ощущения масштаба: если бы каждый из 8 миллиардов человек на Земле генерировал по миллиарду UUID в секунду в течение 100 лет, общее количество сгенерированных UUID составило бы ~2.5 × 10^28, а вероятность хотя бы одной коллизии — менее 0.0000000001%.
Сколько UUID можно сгенерировать за раз?
Наш генератор позволяет создать до 100 UUID за один клик. Этого достаточно для заполнения тестовой базы, создания набора идентификаторов для пакетной вставки, или генерации trace ID для группы запросов.
Чем UUID отличается от GUID?
Ничем существенным. GUID (Globally Unique Identifier) — термин Microsoft, UUID — термин IETF. Оба обозначают 128-битный идентификатор по RFC 9562. Технически идентичны. Некоторые генераторы Microsoft создают GUID с другой структурой бит варианта, но для практических целей разницы нет.
Можно ли по UUID узнать, где и когда он создан?
UUID v4 — нет. Это просто 122 случайных бита. UUID v1 содержит MAC-адрес и timestamp, UUID v7 содержит Unix timestamp. Если для вас важна анонимность — используйте v4.
Зачем в UUID есть дефисы?
Исключительно для читаемости. Дефисы не несут смысловой нагрузки и могут быть опущены: `550e8400e29b41d4a716446655440000` — тот же UUID. В базах данных иногда хранят UUID без дефисов для экономии 4 байт.
Можно ли расшифровать UUID?
UUID v4 не содержит зашифрованных данных. Это случайное число — его нельзя «расшифровать», потому что в нём ничего не зашифровано. Если вам нужен формат, содержащий зашифрованные данные (например, ID пользователя + срок действия), используйте JWT или подписанные токены.
Смотрите также
- Бизнес-калькуляторы — проценты, НДС, маржа, ROI, юнит-экономика, SWOT, RACI
- Математические инструменты — решение уравнений, системы счисления, производные, интегралы
- Конвертеры — конвертация величин, валют, форматов данных, единиц измерения
- Инструменты для дизайна — цвета, градиенты, палитры, генераторы теней и границ