Sudrėkintos Perimetro Skaičiuoklė Skaičiavimams
Apskaičiuokite sudrėkintą perimetrą įvairioms kanalo formoms, įskaitant trapecijas, stačiakampius/kvadratus ir apvalius vamzdžius. Svarbu hidraulinės inžinerijos ir skysčių mechanikos taikymams.
ULID generatorius
Sugeneruotas ULID:
ULID struktūra
Laiko žyma (10 simbolių)
Atsitiktinumas (16 simbolių)
Dokumentacija
ULID Generator
Įvadas
ULID (Universally Unique Lexicographically Sortable Identifier) yra unikalus identifikatorius, kuris sujungia laiko žymę su atsitiktiniais duomenimis, kad sukurtų 26 simbolių eilutę. ULID yra sukurti taip, kad būtų lexikografiškai rūšiuojami, tuo pačiu išlaikant aukštą unikalumo ir atsitiktinumo laipsnį.
ULID struktūra
ULID susideda iš dviejų pagrindinių dalių:
- Laiko žyma (10 simbolių): Pirmieji 10 simbolių atspindi laiką milisekundėmis nuo Unix epochos (1970-01-01).
- Atsitiktinumas (16 simbolių): Likę 16 simbolių yra sugeneruoti naudojant kriptografiškai saugius atsitiktinius duomenis.
Gautas 26 simbolių eilutė yra koduojama naudojant Crockford'o base32 abėcėlę (0-9 ir A-Z, neįskaitant I, L, O ir U).
Formulė
ULID generuojamas naudojant šiuos žingsnius:
- Sugeneruoti 48 bitų laiko žymę (milisekundės nuo Unix epochos).
- Sugeneruoti 80 bitų kriptografiškai saugius atsitiktinius duomenis.
- Koduoti sujungtus 128 bitus naudojant Crockford'o base32 kodavimą.
Apskaičiavimas
ULID generatorius atlieka šiuos žingsnius:
- Gauti dabartinę laiko žymę milisekundėmis.
- Sugeneruoti 10 atsitiktinių baitų (80 bitų) naudojant kriptografiškai saugų atsitiktinių skaičių generatorių.
- Sujungti laiko žymę ir atsitiktinius duomenis į 128 bitų sveikąjį skaičių.
- Koduoti 128 bitų sveikąjį skaičių naudojant Crockford'o base32 kodavimą.
Naudojimo atvejai
ULID yra naudingi įvairiose situacijose, įskaitant:
- Duomenų bazės raktai: ULID gali būti naudojami kaip unikalūs identifikatoriai duomenų bazės įrašams, užtikrinant unikalumą ir rūšiuojamumą.
- Išsklaidyti sistemai: Išsklaidytose aplinkose ULID gali būti generuojami be koordinacijos tarp mazgų.
- Žurnalavimas ir sekimas: ULID gali būti naudojami žurnalo įrašams arba sekimo įvykiams žymėti, suteikiant rūšiuojamą ir unikalų identifikatorių.
- URL draugiški ID: ULID yra saugūs URL ir gali būti naudojami žiniatinklio programose kaip identifikatoriai URL.
Alternatyvos
Nors ULID yra universalūs, yra ir kitų unikalių identifikatorių sistemų, kurias verta apsvarstyti:
- UUID (Universally Unique Identifier): 128 bitų identifikatorius, kuris neturi laiko žymės komponento.
- KSUID (K-Sortable Unique IDentifier): Panašus į ULID, bet su skirtingu laiko žymės kodavimu.
- Snowflake ID: Twitter'o išsklaidyto unikalių ID generavimo sistema, kuri apima laiko žymę ir darbuotojo ID.
Istorija
ULID buvo pristatyti 2016 metais Alizain Feerasta kaip alternatyva UUID. Jie buvo sukurti siekiant išspręsti kai kurias UUID ribas, ypač kalbant apie rūšiuojamumą ir skaitomumą. ULID specifikacija nuo jos pristatymo išliko stabili, o įvairios įgyvendinimo versijos yra prieinamos skirtingose programavimo kalbose.
Pavyzdžiai
Štai keletas kodo pavyzdžių, kaip generuoti ULID skirtingose programavimo kalbose:
1// JavaScript įgyvendinimas
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 įgyvendinimas
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 įgyvendinimas
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 // Laiko žymės kodavimas
16 for (int i = 9; i >= 0; i--) {
17 result.append(ENCODING_CHARS[(int) (timestamp % 32)]);
18 timestamp /= 32;
19 }
20 // Atsitiktinumo kodavimas
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
Šie pavyzdžiai demonstruoja, kaip generuoti ULID JavaScript, Python ir Java kalbose. Galite pritaikyti šias funkcijas savo specifiniams poreikiams arba integruoti jas į didesnes sistemas, kurioms reikalingi unikalūs identifikatoriai.
Nuorodos
- "ULID specifikacija." GitHub, https://github.com/ulid/spec. Pasiekta 2024 m. rugpjūčio 2 d.
- "Crockford'o base32 kodavimas." Base32 kodavimas, http://www.crockford.com/base32.html. Pasiekta 2024 m. rugpjūčio 2 d.
- "UUID prieš ULID." Stack Overflow, https://stackoverflow.com/questions/54222235/uuid-vs-ulid. Pasiekta 2024 m. rugpjūčio 2 d.
Atsiliepimai
Spauskite atsiliepimų pranešimą, kad pradėtumėte palikti atsiliepimą apie šį įrankį
Susiję įrankiai
Atraskite daugiau įrankių, kurie gali būti naudingi jūsų darbo procesui