'01ARZ3NDEKTSV4RRFFQ69G5FAV', 'parentId' => '01BX5ZZKBKACTAV9WEVGEMMVRY', 'userId' => '01CA2ZZKBKACTAV9WEVGEMMVRY', ]; // ❌ Ungültige ULIDs $invalidExamples = [ 'id' => '01ARZ3NDEKTSV4RRFFQ69G5F', // Zu kurz (25 statt 26 Zeichen) 'parentId' => '01ARZ3NDEKTSV4RRFFQ69G5FAVX', // Zu lang (27 Zeichen) 'userId' => '01ARZ3NDEKTSV4RRFFQ69G5FIV', // Enthält 'I' (nicht erlaubt) ]; /** * ULID (Universally Unique Lexicographically Sortable Identifier) Standard: * * Format: 26 Zeichen in Crockford Base32 Encoding * - Erste 10 Zeichen: Zeitstempel (48-bit Unix-Zeit in Millisekunden) * - Letzte 16 Zeichen: Zufälliger Teil (80-bit Entropie) * * Erlaubte Zeichen (Crockford Base32): * 0123456789ABCDEFGHJKMNPQRSTVWXYZ * * Nicht erlaubte Zeichen (um Verwechslungen zu vermeiden): * - I (sieht wie 1 aus) * - L (sieht wie 1 aus) * - O (sieht wie 0 aus) * - U (kann wie V aussehen) * * Eigenschaften von ULIDs: * ✅ Lexikographisch sortierbar (chronologische Ordnung) * ✅ URL-sicher (keine Sonderzeichen) * ✅ Case-insensitive (obwohl üblicherweise Großbuchstaben verwendet werden) * ✅ Monotonisch (innerhalb derselben Millisekunde aufsteigend) * ✅ Kompakt (26 Zeichen vs. 36 für UUID mit Bindestrichen) * * Validierungsregeln: * - Exakt 26 Zeichen * - Nur Crockford Base32 Zeichen * - Keine Leer- oder Sonderzeichen * - Case-sensitive (üblicherweise Großbuchstaben) * * Beispiele für gültige ULIDs: * - 01ARZ3NDEKTSV4RRFFQ69G5FAV (Standard-Format) * - 00000000000000000000000000 (Minimum ULID) * - 7ZZZZZZZZZZZZZZZZZZZZZZZZZ (Maximum timestamp) * - GGGGGGGGGGGGGGGGGGGGGGGGGG (Alle G's - technisch gültig) */