Калкулатор за мокър периметър на канали и тръби
Изчислете мокрия периметър за различни форми на канали, включително трапеции, правоъгълници/квадрати и кръгли тръби. Необходимо за хидравлично инженерство и приложения в механиката на флуидите.
Генератор на 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.
Обратна връзка
Щракнете върху тост за обратна връзка, за да започнете да давате обратна връзка за този инструмент
Свързани инструменти
Открийте още инструменти, които могат да бъдат полезни за вашия работен процес