Калькулятор для расчета омываемого периметра каналов
Рассчитайте омываемый периметр для различных форм каналов, включая трапеции, прямоугольники/квадраты и круглые трубы. Необходимо для гидравлического проектирования и приложений механики жидкости.
Генератор ULID
Сгенерированный ULID:
Структура ULID
Временная метка (10 символов)
Случайность (16 символов)
Документация
Генератор ULID
Введение
ULID (Универсальный Уникальный Лексикографически Сортируемый Идентификатор) — это уникальный идентификатор, который сочетает в себе временную метку с случайными данными для создания строки из 26 символов. ULID разработаны для того, чтобы быть лексикографически сортируемыми, сохраняя при этом высокий уровень уникальности и случайности.
Структура ULID
ULID состоит из двух основных частей:
- Временная метка (10 символов): Первые 10 символов представляют время в миллисекундах с начала эпохи Unix (1970-01-01).
- Случайные данные (16 символов): Оставшиеся 16 символов генерируются с использованием криптографически безопасных случайных данных.
Результирующая строка из 26 символов кодируется с использованием алфавита base32 Крокфорда (0-9 и A-Z, исключая I, L, O и U).
Формула
ULID генерируется с использованием следующих шагов:
- Сгенерировать 48-битную временную метку (миллисекунды с начала эпохи Unix).
- Сгенерировать 80 бит криптографически безопасных случайных данных.
- Закодировать объединенные 128 бит с использованием кодирования base32 Крокфорда.
Расчет
Генератор ULID выполняет следующие шаги:
- Получить текущую временную метку в миллисекундах.
- Сгенерировать 10 случайных байтов (80 бит) с использованием криптографически безопасного генератора случайных чисел.
- Объединить временную метку и случайные данные в 128-битное целое число.
- Закодировать 128-битное целое число с использованием кодирования base32 Крокфорда.
Сценарии использования
ULID полезны в различных сценариях, включая:
- Ключи базы данных: ULID можно использовать в качестве уникальных идентификаторов для записей в базе данных, обеспечивая уникальность и сортируемость.
- Распределенные системы: В распределенных средах ULID можно генерировать без координации между узлами.
- Логирование и отслеживание: ULID можно использовать для пометки записей журнала или отслеживания событий, предоставляя сортируемый и уникальный идентификатор.
- Идентификаторы, безопасные для URL: ULID безопасны для URL и могут использоваться в веб-приложениях в качестве идентификаторов в URL.
Альтернативы
Хотя ULID универсальны, есть и другие системы уникальных идентификаторов, которые стоит рассмотреть:
- UUID (Универсальный Уникальный Идентификатор): 128-битный идентификатор, который не включает компонент временной метки.
- KSUID (K-Сортируемый Уникальный Идентификатор): Похож на ULID, но с другим кодированием временной метки.
- Snowflake ID: Система генерации уникальных идентификаторов Twitter, которая включает временную метку и идентификатор рабочего узла.
История
ULID были представлены в 2016 году Ализаином Феерастой как альтернатива UUID. Они были разработаны для устранения некоторых ограничений UUID, особенно в отношении сортируемости и читаемости. Спецификация ULID оставалась стабильной с момента своего появления, и различные реализации доступны на разных языках программирования.
Примеры
Вот несколько примеров кода для генерации ULID на разных языках программирования:
1// Реализация на JavaScript
2function generateULID() {
3 const timestamp = Date.now().toString(36).padStart(10, '0');
4 const randomness = crypto.getRandomValues(new Uint8Array(16))
5 .reduce((acc, byte) => acc + byte.toString(36).padStart(2, '0'), '');
6 return (timestamp + randomness).toUpperCase();
7}
8
9console.log(generateULID());
10
1## Реализация на Python
2import time
3import secrets
4import base64
5
6def generate_ulid():
7 timestamp = int(time.time() * 1000).to_bytes(6, byteorder="big")
8 randomness = secrets.token_bytes(10)
9 return base64.b32encode(timestamp + randomness).decode("ascii").lower()
10
11print(generate_ulid())
12
1// Реализация на Java
2import java.security.SecureRandom;
3import java.time.Instant;
4
5public class ULIDGenerator {
6 private static final SecureRandom random = new SecureRandom();
7 private static final char[] ENCODING_CHARS = "0123456789ABCDEFGHJKMNPQRSTVWXYZ".toCharArray();
8
9 public static String generateULID() {
10 long timestamp = Instant.now().toEpochMilli();
11 byte[] randomness = new byte[10];
12 random.nextBytes(randomness);
13
14 StringBuilder result = new StringBuilder();
15 // Кодировать временную метку
16 for (int i = 9; i >= 0; i--) {
17 result.append(ENCODING_CHARS[(int) (timestamp % 32)]);
18 timestamp /= 32;
19 }
20 // Кодировать случайные данные
21 for (byte b : randomness) {
22 result.append(ENCODING_CHARS[b & 31]);
23 }
24 return result.toString();
25 }
26
27 public static void main(String[] args) {
28 System.out.println(generateULID());
29 }
30}
31
Эти примеры демонстрируют, как генерировать ULID на JavaScript, Python и Java. Вы можете адаптировать эти функции под свои конкретные нужды или интегрировать их в более крупные системы, требующие уникальных идентификаторов.
Ссылки
- "Спецификация ULID." GitHub, https://github.com/ulid/spec. Доступ 2 авг. 2024.
- "Кодирование base32 Крокфорда." Кодирование base32, http://www.crockford.com/base32.html. Доступ 2 авг. 2024.
- "UUID против ULID." Stack Overflow, https://stackoverflow.com/questions/54222235/uuid-vs-ulid. Доступ 2 авг. 2024.
Обратная связь
Нажмите на уведомление об обратной связи, чтобы начать оставлять отзыв об этом инструменте
Связанные инструменты
Откройте для себя больше инструментов, которые могут быть полезны для вашего рабочего процесса