Калкулатор за мокър периметър на канали и тръби
Изчислете мокрия периметър за различни форми на канали, включително трапеции, правоъгълници/квадрати и кръгли тръби. Необходимо за хидравлично инженерство и приложения в механиката на флуидите.
Генератор на ULID
Генериран ULID:
Структура на ULID
Времеви печат (10 символа)
Случайност (16 символа)
Документация
ULID Генератор
Въведение
ULID (Универсален Уникален Лексикографски Сортиран Идентификатор) е уникален идентификатор, който комбинира времеви печат с произволни данни, за да създаде низ от 26 символа. ULID-ите са проектирани да бъдат лексикографски сортирани, като същевременно поддържат висока степен на уникалност и произволност.
Структура на ULID
ULID се състои от две основни части:
- Времеви печат (10 символа): Първите 10 символа представляват времето в милисекунди от Unix Epoch (1970-01-01).
- Произволност (16 символа): Останалите 16 символа се генерират с помощта на криптографски сигурни произволни данни.
Полученият 26-символен низ е кодирани с помощта на базовата32 азбука на Крокфорд (0-9 и A-Z, с изключение на I, L, O и U).
Формула
ULID се генерира, като се следват следните стъпки:
- Генерирайте 48-битов времеви печат (милисекунди от Unix Epoch).
- Генерирайте 80 бита криптографски сигурни произволни данни.
- Кодирайте комбинираните 128 бита с помощта на базовата32 кодировка на Крокфорд.
Изчисление
Генераторът на ULID извършва следните стъпки:
- Вземете текущия времеви печат в милисекунди.
- Генерирайте 10 произволни байта (80 бита) с помощта на криптографски сигурен генератор на случайни числа.
- Комбинирайте времевия печат и произволните данни в 128-битов цяло число.
- Кодирайте 128-битовото цяло число с помощта на базовата32 кодировка на Крокфорд.
Приложения
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.
- "Кодиране с базата32 на Крокфорд." Кодиране с базата32, http://www.crockford.com/base32.html. Достъпно на 2 авг. 2024.
- "UUID срещу ULID." Stack Overflow, https://stackoverflow.com/questions/54222235/uuid-vs-ulid. Достъпно на 2 авг. 2024.
Обратна връзка
Кликнете върху обратната връзка, за да започнете да давате обратна връзка за този инструмент
Свързани инструменти
Открийте още инструменти, които може да бъдат полезни за вашия работен процес