Γεννήτρια ULID και Nano ID
Δημιουργήστε ULID (με μονοτονική επιλογή) ή Nano ID με δικό σας αλφάβητο και μήκος, αποκωδικοποιήστε χρονική σήμανση ULID και ελέγξτε τον κίνδυνο σύγκρουσης.
Πιθανότητα σύγκρουσης
- Μέγεθος αλφαβήτου
- —
- Εντροπία ανά αναγνωριστικό
- —
- Πιθανά αναγνωριστικά
- —
- Αναγνωριστικά για πιθανότητα 1% να υπάρχει διπλότυπο
- —
- Χρόνος μέχρι να φτάσει αυτός ο κίνδυνος του 1%
- —
Αποκωδικοποίηση ULID
- Χρονική σήμανση (UTC, ISO 8601)
- Τοπική ημερομηνία και ώρα
- Ώρα Unix (ms)
- Τυχαίο μέρος (80 bit, δεκαεξαδικό)
Πώς να δημιουργήσετε ULID ή Nano ID
- Στο πεδίο Τύπος αναγνωριστικού, επιλέξτε ULID (ταξινομήσιμο) ή Nano ID (σύντομο).
- Ορίστε Πόσα (1 έως 1.000). Δέκα αναγνωριστικά δημιουργούνται μόλις φορτώσει η σελίδα.
- Για τα ULID, αφήστε επιλεγμένο το Μονοτονικό (αυστηρά αύξουσα σειρά), ώστε και τα αναγνωριστικά που δημιουργούνται στο ίδιο χιλιοστό του δευτερολέπτου να ταξινομούνται σωστά, και ενεργοποιήστε τα Πεζά αν το σύστημά σας τα προτιμά.
- Για τα Nano ID, επιλέξτε Αλφάβητο (ή Προσαρμοσμένο… και πληκτρολογήστε τους δικούς σας χαρακτήρες) και Μήκος.
- Πατήστε Δημιουργία και στη συνέχεια Αντιγραφή της λίστας ή Λήψη .txt (ένα αναγνωριστικό ανά γραμμή).
Για να διαβάσετε την ημερομηνία που κρύβεται σε ένα ULID, επικολλήστε το στην ενότητα Αποκωδικοποίηση ULID ή πατήστε Αποκωδικοποίηση του πρώτου αναγνωριστικού. Το εργαλείο δείχνει τη χρονική σήμανση σε UTC (ISO 8601), στην τοπική ώρα σας, ως χιλιοστά του δευτερολέπτου Unix και το τυχαίο μέρος των 80 bit σε δεκαεξαδική μορφή.
Τι είναι το ULID;
Το ULID (Universally Unique Lexicographically Sortable Identifier) είναι ένα αναγνωριστικό 128 bit που γράφεται με 26 χαρακτήρες Crockford Base32, για παράδειγμα 01ARZ3NDEKTSV4RRFFQ69G5FAV. Οι πρώτοι 10 χαρακτήρες κωδικοποιούν μια χρονική σήμανση 48 bit σε χιλιοστά του δευτερολέπτου (αρκετή μέχρι το έτος 10889)· οι τελευταίοι 16 χαρακτήρες είναι 80 τυχαία bit. Το Crockford Base32 παραλείπει τα I, L, O και U για να αποφεύγεται η σύγχυση, και η αποκωδικοποίηση δεν κάνει διάκριση πεζών-κεφαλαίων.
Επειδή ο χρόνος προηγείται, τα ULID ταξινομούνται αλφαβητικά με τη σειρά δημιουργίας. Έτσι είναι καλά πρωτεύοντα κλειδιά: οι νέες γραμμές προστίθενται στο τέλος ενός ευρετηρίου B-tree αντί να σκορπίζονται όπως τα τυχαία UUID, και μπορείτε να ταξινομείτε με βάση το αναγνωριστικό αντί για ξεχωριστή στήλη ημερομηνίας.
Μονοτονική λειτουργία. Μέσα στο ίδιο χιλιοστό του δευτερολέπτου, τα τυχαία ULID θα ταξινομούνταν με τυχαία σειρά. Με τη μονοτονική επιλογή, το εργαλείο ακολουθεί την προδιαγραφή ULID: όταν δημιουργούνται πολλά αναγνωριστικά στο ίδιο χιλιοστό, διατηρεί τη χρονική σήμανση και προσθέτει 1 στο προηγούμενο τυχαίο μέρος. Αν το ρολόι πάει προς τα πίσω, κρατά την τελευταία χρονική σήμανση, ώστε η ακολουθία να μη μειώνεται ποτέ.
Να έχετε υπόψη ότι ένα ULID αποκαλύπτει πότε δημιουργήθηκε. Μην το χρησιμοποιείτε εκεί όπου αυτή η πληροφορία είναι ευαίσθητη.
Τι είναι το Nano ID;
Το Nano ID είναι ένα συμπαγές τυχαίο αναγνωριστικό. Η προεπιλογή είναι 21 χαρακτήρες από αλφάβητο 64 χαρακτήρων ασφαλές για URL (A–Z a–z 0–9 _ -), που δίνει 126 τυχαία bit, παρόμοια με ένα UUID v4 (122 bit) με λιγότερους χαρακτήρες. Μπορείτε να διαλέξετε δεκαεξαδικό, μόνο ψηφία, πεζά και ψηφία, αλφαριθμητικό, ένα σύνολο χωρίς όμοιους χαρακτήρες (χωρίς 0/O, 1/l/I, 5/S…) για κωδικούς που πληκτρολογούν άνθρωποι, ή το δικό σας αλφάβητο 2 έως 256 χαρακτήρων. Οι επαναλαμβανόμενοι χαρακτήρες σε ένα προσαρμοσμένο αλφάβητο αφαιρούνται, επειδή θα έκαναν ορισμένους χαρακτήρες πιο πιθανούς.
Κάθε χαρακτήρας επιλέγεται με την crypto.getRandomValues και δειγματοληψία με απόρριψη, επομένως δεν υπάρχει μεροληψία από το modulo.
Πιθανότητα σύγκρουσης
Ο πίνακας Πιθανότητα σύγκρουσης εφαρμόζει το όριο των γενεθλίων. Με αλφάβητο μεγέθους A και μήκος L, υπάρχουν N = A^L πιθανά αναγνωριστικά. Μετά από k αναγνωριστικά, η πιθανότητα να υπάρχει τουλάχιστον ένα διπλότυπο είναι περίπου 1 − e^(−k²/2N), άρα κίνδυνος 1% επιτυγχάνεται μετά από k ≈ √(2N · ln(1/0,99)) αναγνωριστικά. Εισαγάγετε τα Αναγνωριστικά που δημιουργούνται ανά ώρα για να δείτε πόσος χρόνος θα χρειαζόταν. Με τις προεπιλεγμένες ρυθμίσεις και 1.000 αναγνωριστικά ανά ώρα, ο κίνδυνος 1% χρειάζεται περίπου 149 δισεκατομμύρια χρόνια· με 8 δεκαεξαδικούς χαρακτήρες χρειάζονται μόλις περίπου 9.300 αναγνωριστικά.
Συχνές ερωτήσεις
ULID ή UUID;
Και τα δύο είναι 128 bit. Το ULID γράφεται πιο σύντομα (26 χαρακτήρες αντί για 36) και ταξινομείται με βάση τον χρόνο. Η έκδοση 7 του UUID προσφέρει πλέον την ίδια χρονική ταξινόμηση στην τυπική μορφή UUID, που οι βάσεις δεδομένων συχνά αποθηκεύουν εγγενώς. Διαλέξτε UUID v7 αν το σύστημά σας το υποστηρίζει, ULID αν θέλετε μια συμπαγή, ευανάγνωστη συμβολοσειρά.
Είναι τα ULID και τα Nano ID αρκετά ασφαλή για διακριτικά (tokens);
Τα Nano ID με το προεπιλεγμένο αλφάβητο και μήκος έχουν 126 τυχαία bit από κρυπτογραφική γεννήτρια, κάτι που αρκεί για συνδέσμους που δεν μαντεύονται. Τα ULID έχουν μόνο 80 τυχαία bit και, στη μονοτονική λειτουργία, διαδοχικά αναγνωριστικά διαφέρουν κατά ένα, γι’ αυτό μη χρησιμοποιείτε ULID ως μυστικά.
Μπορώ να μικρύνω ένα Nano ID;
Ναι, αλλά ο κίνδυνος σύγκρουσης αυξάνεται πολύ γρήγορα. Ελέγξτε την τιμή Αναγνωριστικά για πιθανότητα 1% να υπάρχει διπλότυπο για το μήκος και το αλφάβητό σας πριν βασιστείτε σε ένα σύντομο αναγνωριστικό.
Γιατί ο αποκωδικοποιητής απορρίπτει το ULID μου;
Ένα ULID πρέπει να έχει ακριβώς 26 χαρακτήρες, να χρησιμοποιεί μόνο χαρακτήρες Crockford Base32 και να ξεκινά με 0 έως 7 (ένας μεγαλύτερος πρώτος χαρακτήρας θα ξεπερνούσε τα 128 bit).
Αποθηκεύονται ή στέλνονται κάπου τα αναγνωριστικά;
Όχι. Δημιουργούνται στο πρόγραμμα περιήγησής σας και εξαφανίζονται όταν φύγετε από τη σελίδα.
Σχετικά εργαλεία
- Γεννήτρια UUID Δωρεάν γεννήτρια UUID εκδόσεων 4 και 7. Δημιουργήστε έως 1.000 ταυτόχρονα, με κεφαλαία ή χωρίς παύλες, και αντιγράψτε ή κατεβάστε τα ως .txt.
- Γεννήτρια κωδικών πρόσβασης Δωρεάν γεννήτρια που δημιουργεί ισχυρούς τυχαίους κωδικούς πρόσβασης 4 έως 128 χαρακτήρων στο πρόγραμμα περιήγησης, με ασφαλή γεννήτρια τυχαίων αριθμών.
- Μετατροπέας Unix timestamp Μετατρέψτε Unix timestamp σε δευτερόλεπτα ή χιλιοστά σε ευανάγνωστες ημερομηνίες (τοπική ώρα, UTC, ISO 8601) και μετατρέψτε κάθε ημερομηνία ξανά σε epoch.