Benetzter Umfang Rechner für verschiedene Kanalformen
Berechnen Sie den benetzten Umfang für verschiedene Kanalformen, einschließlich Trapeze, Rechtecke/Quadrate und kreisförmige Rohre. Wesentlich für Anwendungen in der Wasserbau- und Strömungsmechanik.
ULID-Generator
Generierte ULID:
ULID-Struktur
Zeitstempel (10 Zeichen)
Zufälligkeit (16 Zeichen)
Dokumentation
ULID-Generator
Einführung
Ein ULID (Universally Unique Lexicographically Sortable Identifier) ist ein eindeutiger Bezeichner, der einen Zeitstempel mit zufälligen Daten kombiniert, um eine 26-Zeichen lange Zeichenkette zu erstellen. ULIDs sind so konzipiert, dass sie lexikografisch sortierbar sind und gleichzeitig ein hohes Maß an Eindeutigkeit und Zufälligkeit aufweisen.
Struktur eines ULID
Ein ULID besteht aus zwei Hauptteilen:
- Zeitstempel (10 Zeichen): Die ersten 10 Zeichen stellen die Zeit in Millisekunden seit der Unix-Epoche (1970-01-01) dar.
- Zufälligkeit (16 Zeichen): Die verbleibenden 16 Zeichen werden mit kryptografisch sicheren Zufallsdaten generiert.
Die resultierende 26-Zeichen lange Zeichenkette wird mit dem Crockford's Base32-Alphabet kodiert (0-9 und A-Z, ausgenommen I, L, O und U).
Formel
Der ULID wird mit den folgenden Schritten generiert:
- Generieren Sie einen 48-Bit-Zeitstempel (Millisekunden seit der Unix-Epoche).
- Generieren Sie 80 Bit kryptografisch sichere Zufallsdaten.
- Kodieren Sie die kombinierten 128 Bit mit der Crockford's Base32-Kodierung.
Berechnung
Der ULID-Generator führt die folgenden Schritte aus:
- Holen Sie sich den aktuellen Zeitstempel in Millisekunden.
- Generieren Sie 10 zufällige Bytes (80 Bit) mit einem kryptografisch sicheren Zufallszahlengenerator.
- Kombinieren Sie den Zeitstempel und die Zufallsdaten zu einer 128-Bit-Ganzzahl.
- Kodieren Sie die 128-Bit-Ganzzahl mit der Crockford's Base32-Kodierung.
Anwendungsfälle
ULIDs sind in verschiedenen Szenarien nützlich, einschließlich:
- Datenbankschlüssel: ULIDs können als eindeutige Bezeichner für Datenbankeinträge verwendet werden, um Eindeutigkeit und Sortierbarkeit zu gewährleisten.
- Verteilte Systeme: In verteilten Umgebungen können ULIDs ohne Koordination zwischen Knoten generiert werden.
- Protokollierung und Verfolgung: ULIDs können verwendet werden, um Protokolleinträge oder Ereignisse zu kennzeichnen und einen sortierbaren und eindeutigen Bezeichner bereitzustellen.
- URL-freundliche IDs: ULIDs sind URL-sicher und können in Webanwendungen als Bezeichner in URLs verwendet werden.
Alternativen
Obwohl ULIDs vielseitig sind, gibt es andere Systeme für eindeutige Bezeichner, die zu berücksichtigen sind:
- UUID (Universally Unique Identifier): Ein 128-Bit-Bezeichner, der keinen Zeitstempel enthält.
- KSUID (K-Sortable Unique IDentifier): Ähnlich wie ULID, aber mit einer anderen Zeitstempelkodierung.
- Snowflake-ID: Das verteilte eindeutige ID-Generierungssystem von Twitter, das einen Zeitstempel und eine Worker-ID enthält.
Geschichte
ULIDs wurden 2016 von Alizain Feerasta als Alternative zu UUIDs eingeführt. Sie wurden entwickelt, um einige Einschränkungen von UUIDs zu adressieren, insbesondere in Bezug auf Sortierbarkeit und Lesbarkeit. Die ULID-Spezifikation ist seit ihrer Einführung stabil geblieben, mit verschiedenen Implementierungen in verschiedenen Programmiersprachen.
Beispiele
Hier sind einige Codebeispiele zur Generierung von ULIDs in verschiedenen Programmiersprachen:
1// JavaScript-Implementierung
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-Implementierung
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-Implementierung
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 // Zeitstempel kodieren
16 for (int i = 9; i >= 0; i--) {
17 result.append(ENCODING_CHARS[(int) (timestamp % 32)]);
18 timestamp /= 32;
19 }
20 // Zufälligkeit kodieren
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
Diese Beispiele zeigen, wie man ULIDs in JavaScript, Python und Java generiert. Sie können diese Funktionen an Ihre spezifischen Bedürfnisse anpassen oder in größere Systeme integrieren, die eindeutige Bezeichner benötigen.
Referenzen
- "ULID-Spezifikation." GitHub, https://github.com/ulid/spec. Abgerufen am 2. Aug. 2024.
- "Crockford's Base32-Kodierung." Base32-Kodierung, http://www.crockford.com/base32.html. Abgerufen am 2. Aug. 2024.
- "UUID vs ULID." Stack Overflow, https://stackoverflow.com/questions/54222235/uuid-vs-ulid. Abgerufen am 2. Aug. 2024.
Feedback
Klicken Sie auf das Feedback-Toast, um Feedback zu diesem Tool zu geben
Verwandte Werkzeuge
Entdecken Sie weitere Werkzeuge, die für Ihren Arbeitsablauf nützlich sein könnten