Κωδικοποίηση / αποκωδικοποίηση Base62

Μετατροπή αριθμού ή ακολουθίας byte με Base62: 62 χαρακτήρες από ψηφία, κεφαλαία και πεζά γράμματα, κανένας από τους οποίους δεν χρειάζεται διαφυγή σε ερώτημα URL ή σε κείμενο HTML. Γι' αυτό γράφονται έτσι οι σύντομοι σύνδεσμοι και τα αναγνωριστικά αυτόματης αύξησης. Δύο λειτουργίες: ένας δεκαδικός αριθμός (ένα αναγνωριστικό γίνεται σύντομος κωδικός) και byte (κείμενο ή δεκαεξαδική είσοδος). Επίσης: Base64 | Base32 / Base58 | Base91.
Όλη η επεξεργασία γίνεται τοπικά στο πρόγραμμα περιήγησης — τα δεδομένα δεν μεταφορτώνονται ποτέ σε διακομιστή.

Δεν έχει ακουστεί ποτέ το Base62; Τι είναι το Base62 — εξηγημένο σε απλά λόγια (με εργασμένα παραδείγματα, τα τρία αλφάβητα και τις παγίδες).
Αλφάβητο:
Συμπλήρωση αποτελέσματος σε σταθερό πλάτος: 0 = καμία συμπλήρωση. Η συμπλήρωση επαναλαμβάνει τον χαρακτήρα μηδέν του επιλεγμένου αλφαβήτου, οπότε ο ίδιος αριθμός συμπληρώνεται διαφορετικά στο αλφάβητο γραμμάτων-πρώτα.
Πώς λειτουργεί:
Η είσοδος είναι:
Πώς λειτουργεί:
Έξοδος ως:
Το Ctrl+Enter στην είσοδο εκτελεί την ενεργή λειτουργία.
Επιλογή Κωδικοποίηση ή Αποκωδικοποίηση και εκτέλεση με το αντίστοιχο κουμπί. Το κουμπί Αυτοέλεγχος εκτελεί κάθε τεκμηριωμένο δείγμα, κάθε μήκος από 0 έως 64 byte και ένα εύρος δεκαδικών αριθμών και στα τρία αλφάβητα, και αναφέρει εδώ το πλήθος των ελέγχων.
Τα τρία αλφάβητα, εκτυπωμένα πλήρως: το Base62 δεν έχει οργανισμό προτύπων πίσω του, οπότε το αλφάβητο δεν είναι εγγυημένο ανάμεσα στις υλοποιήσεις. Αυτές είναι οι τρεις διατάξεις που εμφανίζονται πράγματι· καθεμία εκτυπώνεται χαρακτήρα προς χαρακτήρα με την τιμή του, ώστε κάθε αποτέλεσμα να ανιχνεύεται πίσω στο ακριβές αλφάβητο που το παρήγαγε. Το σκιασμένο κελί είναι ο χαρακτήρας που σημαίνει μηδέν, που δεν είναι ο ίδιος χαρακτήρας και στις τρεις.
Το Base62 διακρίνει πεζά και κεφαλαία και στις τρεις διατάξεις: ένα κεφαλαίο γράμμα και η πεζή μορφή του σχεδόν πάντα ονομάζουν διαφορετικές τιμές, οπότε ένας κωδικός που πέρασε από βήμα μετατροπής σε πεζά είναι διαφορετικός αριθμός, όχι σφάλμα.
Το Base62 διακρίνει πεζά και κεφαλαία και στις τρεις διατάξεις: ένα κεφαλαίο γράμμα και η πεζή μορφή του σχεδόν πάντα ονομάζουν διαφορετικές τιμές, οπότε ένας κωδικός που πέρασε από βήμα μετατροπής σε πεζά είναι διαφορετικός αριθμός, όχι σφάλμα.
Μήκος των ίδιων byte σε κάθε κωδικοποίηση:
Πόσο μεγάλη είσοδο δέχεται αυτή η σελίδα και γιατί: κάθε λειτουργία εδώ μετατρέπει μέσω ενός μεγάλου ακεραίου, και η μετατροπή μεγάλου ακεραίου κοστίζει χρόνο ανάλογο με το τετράγωνο του μήκους. Αυτό είναι ιδιότητα της ίδιας της μορφής, όχι της σελίδας· κάθε εργαλείο που υλοποιεί πραγματικό Base62 έχει το ίδιο σχήμα ορίου. Τα νούμερα παρακάτω προέρχονται από ένα εργαλείο χρονομέτρησης που εκτελεί τις ρουτίνες της ίδιας της σελίδας και όχι από μια ανοιχτή καρτέλα, γι' αυτό είναι σκόπιμα στην απαισιόδοξη πλευρά: ένας επιτραπέζιος υπολογιστής συνήθως τελειώνει αρκετές φορές γρηγορότερα, και αυτό το περιθώριο καλύπτει ένα αργό τηλέφωνο. Τα όρια ορίζονται έτσι ώστε ακόμη και η αργή περίπτωση να τελειώνει αντί να παγώνει την καρτέλα.
Πάνω από το μαλακό όριο, το πρώτο κλικ εξηγεί το κόστος και ζητά δεύτερο κλικ πριν εκτελεστεί· πάνω από το σκληρό όριο η σελίδα αρνείται αντί να παγώσει την καρτέλα για αρκετά δευτερόλεπτα χωρίς τρόπο εμφάνισης προόδου. Η λειτουργία byte μετριέται σε byte όταν κωδικοποιεί και σε χαρακτήρες όταν αποκωδικοποιεί, και ο αριθμός χαρακτήρων είναι πάντα ο μεγαλύτερος: τα 2 048 byte εκτυπώνονται ως περίπου 2 751 χαρακτήρες, πέρα από το όριο χαρακτήρων, οπότε φορτίο περίπου 1 520 byte ή λιγότερο είναι αυτό που επιβιώνει από κυκλική διαδρομή σε αυτή τη σελίδα. Για απλά δυαδικά δεδομένα οποιουδήποτε πραγματικού μεγέθους, το Base64 και το Base91 είναι γραμμικά και δεν έχουν τέτοιο όριο.
Τι είναι το Base62;

Το Base62 είναι τρόπος γραφής αριθμού με μόνο τους χαρακτήρες που επιβιώνουν από επικόλληση οπουδήποτε: τα δέκα ψηφία, τα 26 κεφαλαία και τα 26 πεζά γράμματα. Χωρίς στίξη, χωρίς κενά, χωρίς χαρακτήρα συμπλήρωσης, τίποτα που πρέπει να διαφευχθεί πριν μπει σε διεύθυνση URL, όνομα αρχείου, cookie ή κλειδί βάσης δεδομένων. Δέκα συν 26 συν 26 κάνει 62, και από εκεί προέρχεται το όνομα.

Η έκδοση των 30 δευτερολέπτων: ο αριθμός 12345 γράφεται ως 3D7, και ο 1234567890 γράφεται ως 1LY7VK. Η αντίστροφη πορεία είναι η ίδια πράξη ανάποδα, και χρειάζεται το ακριβές αλφάβητο που παρήγαγε τον κωδικό — ένα διαφορετικό αλφάβητο μετατρέπει τους ίδιους έξι χαρακτήρες σε διαφορετικό αριθμό, χωρίς κανένα μήνυμα σφάλματος.

Αυτή η σελίδα εκτελεί δύο συναφείς λειτουργίες, και η διαφορά τους έχει μεγαλύτερη σημασία από οτιδήποτε άλλο σε αυτήν:

  • Η λειτουργία ακεραίου αντιμετωπίζει την είσοδο ως αριθμό. Ένα δεκαδικό αναγνωριστικό όπως το 1234567890 γίνεται 1LY7VK, και τα αρχικά μηδενικά της εισόδου δεν αποτελούν μέρος της τιμής, οπότε δεν επιστρέφουν.
  • Η λειτουργία byte αντιμετωπίζει την είσοδο ως ακολουθία byte. Τα byte διαβάζονται ως ένας τεράστιος ακέραιος big-endian και στη συνέχεια διαιρούνται με το 62, πρόκειται για την ίδια αριθμητική σε διαφορετικό μέγεθος. Εδώ ο αριθμός των αρχικών μηδενικών byte διατηρείται, ένα μηδενικό byte για κάθε μηδενικό χαρακτήρα.
Από πού προέρχεται το 62 και ποιο είναι το κόστος του

Το 62 δεν είναι δύναμη του δύο, και αυτό το ένα γεγονός διαμορφώνει τα πάντα. Οι γνωστές κωδικοποιήσεις χτίζονται κόβοντας την είσοδο σε σταθερές ομάδες bit: 4 bit εκτυπώνονται ως ένας δεκαεξαδικός χαρακτήρας, 6 bit ως ένας χαρακτήρας Base64, 5 bit ως ένας χαρακτήρας Base32. Το Base62 δεν μπορεί να κάνει κάτι τέτοιο, επειδή κανένας ακέραιος αριθμός bit δεν χωρά σε χαρακτήρα 62 τιμών — τα 5 bit ονομάζουν μόνο 32 τιμές, τα 6 bit 64. Γι' αυτό το Base62 περνά από αριθμητική: διαβάζεται ολόκληρη η είσοδος ως ένας ακέραιος και εκτυπώνεται στη βάση 62.

Ένας χαρακτήρας μεταφέρει τότε log2(62) = 5,954 bit, πολύ κοντά στα 6 του Base64, και στη δεκαδική λειτουργία ένας χαρακτήρας αντικαθιστά log62(10) = 1,792 δεκαδικά ψηφία. Μερικές συνέπειες που αξίζει να είναι γνωστές πριν από την επιλογή μήκους:

Μήκος κωδικούΤιμές που μπορεί να ονομάσειΣτην πράξη
4 χαρακτήρες624 = 14 776 336Αρκεί για μετρητή που μένει κάτω από οκτώ ψηφία, και χωράει στον χώρο ενός αριθμού τηλεφώνου.
6 χαρακτήρες626 = 56 800 235 584Το συνηθισμένο σχήμα ενός κωδικού αναγνωριστικού. Ένα δεκαψήφιο δεκαδικό αναγνωριστικό χωράει σε έξι χαρακτήρες.
7 χαρακτήρες627 = 3 521 614 606 208Πέρα από το εύρος ενός μετρητή 32 bit κατά δύο τάξεις μεγέθους, στο πλάτος ενός σύντομου συνδέσμου.
11 χαρακτήρες6211 = 52 036 560 683 837 093 888Περισσότερο από 264 = 18 446 744 073 709 551 616, οπότε ένας πλήρης αριθμός 64 bit χωράει σε έντεκα χαρακτήρες.

Αντίστροφα, 1 000 δεκαδικά ψηφία χρειάζονται περίπου 558 χαρακτήρες, και 4 096 δεκαδικά ψηφία χρειάζονται 2 285. Η εξοικονόμηση είναι πραγματική αλλά περιορισμένη: το Base62 συντομεύει έναν δεκαδικό αριθμό κατά περίπου 44%, και ποτέ δεν νικά τις πιο πυκνές εκτυπώσιμες κωδικοποιήσεις, επειδή τα 5,954 bit ανά χαρακτήρα είναι απλώς λιγότερα από 6,4 ή 6,5.

Λειτουργία ακεραίου: τι συμβαίνει με τα αρχικά μηδενικά

Ένας ακέραιος έχει μία κανονική γραπτή μορφή και αρχίζει με τον χαρακτήρα μηδέν του αλφαβήτου, που είναι το 0 στις δύο διατάξεις με ψηφία πρώτα και το A στη διάταξη με γράμματα πρώτα. Ό,τι βρίσκεται αριστερά του πρώτου σημαντικού χαρακτήρα είναι συμπλήρωση, και η συμπλήρωση δεν αποτελεί μέρος της τιμής: τα 00012345 και 12345 γίνονται και τα δύο 3D7. Αν χρειάζεται σταθερό πλάτος — για παράδειγμα κωδικός επτά χαρακτήρων που πρέπει να ευθυγραμμιστεί σε στήλη — το πεδίο Συμπλήρωση αποτελέσματος σε σταθερό πλάτος της σελίδας επαναλαμβάνει χαρακτήρες μηδέν μέχρι να φτάσει το πλάτος, οπότε το 12345 σε πλάτος 7 εκτυπώνεται ως 00003D7 στο αλφάβητο ψηφίων-πρώτα και ως AAAADNH στο αλφάβητο γραμμάτων-πρώτα. Η συμπλήρωση είναι καλλυντική: οι αρχικοί χαρακτήρες δεν προσθέτουν τίποτα στην τιμή, και η αποκωδικοποίηση οποιασδήποτε από τις δύο συμβολοσειρές δίνει ξανά το 12345, επειδή τα 0 × 626 και 0 × 625 είναι και τα δύο μηδέν, όποιος χαρακτήρας και αν γράφει το μηδέν.

Η αποκωδικοποίηση συμπληρωμένης συμβολοσειράς λειτουργεί επομένως επίσης, και η σελίδα αναφέρει πόσοι από τους αρχικούς χαρακτήρες ήταν χαρακτήρες μηδέν, ώστε η διαφορά ανάμεσα στο «ο κωδικός έχει επτά χαρακτήρες» και στο «η τιμή χρειάστηκε τρεις χαρακτήρες» να μη μένει ποτέ μυστήριο.

Λειτουργία byte: η ίδια αριθμητική σε ακολουθία byte

Η λειτουργία byte διαβάζει τα byte εισόδου ως έναν ακέραιο big-endian — ολόκληρη η ακολουθία byte αντιμετωπίζεται ως ένας αριθμός, όσο μακρύς κι αν είναι — και εκτυπώνει αυτόν τον αριθμό στη βάση 62. Επειδή ένα byte περιέχει 8 bit και ένας χαρακτήρας ονομάζει 5,954 από αυτά, η λειτουργία byte δεν είναι συμπίεση: χρειάζεται περίπου 134% του μεγέθους της εισόδου, ελαφρώς χειρότερα από το 133% του Base64. Στο δείγμα 92 byte του πίνακα μεγεθών παραπάνω, τα 92 byte εκτυπώνονται ως 124 χαρακτήρες Base62, και το Base64 επίσης εκτυπώνει 124 (123 από αυτούς πριν από τη συμπλήρωση =). Το Base62 χάνει από το Base64 στην πυκνότητα και κερδίζει στην ασφάλεια των χαρακτήρων, που είναι το αντάλλαγμα που κάνει σκόπιμα κάθε σύντομος σύνδεσμος και κάθε κωδικός πρόσκλησης.

Τα αρχικά μηδενικά byte διατηρούνται, και αυτό είναι εύκολο να γίνει λάθος και προς τις δύο κατευθύνσεις. Δύο αρχικά μηδενικά byte ακολουθούμενα από το 0x01 εκτυπώνονται ως 001 στο αλφάβητο ψηφίων-πρώτα και ως AAB στο αλφάβητο γραμμάτων-πρώτα, επειδή οι αρχικοί χαρακτήρες γράφουν το μηδέν και είναι ένας για κάθε μηδενικό byte. Μια ακολουθία byte με ένα μόνο 0x00 εκτυπώνεται ως ο μοναδικός χαρακτήρας 0, και μια ακολουθία με ένα μόνο 0x01 εκτυπώνεται ως 1. Αυτό είναι το μοναδικό σημείο όπου η λειτουργία byte και η λειτουργία ακεραίου διαφέρουν ενώ τρέχουν τον ίδιο αλγόριθμο.

Το τίμημα είναι ότι η λειτουργία byte κληρονομεί τον τετραγωνικό χρόνο της αριθμητικής: τα 1 024 byte εκτιμώνται σε περίπου ένα τρίτο του δευτερολέπτου και τα 2 048 byte σε περίπου 1,3 δευτερόλεπτα, τα ίδια νούμερα που δίνει ο πίνακας ορίων παραπάνω. Γι' αυτό η λειτουργία byte εδώ περιορίζεται σε 2 048 byte εξόδου και σε 2 048 χαρακτήρες επιστροφής — τα 2 048 byte εκτυπώνονται ως περίπου 2 751 χαρακτήρες, οπότε περίπου 1 520 byte είναι το μεγαλύτερο φορτίο που επιβιώνει από κυκλική διαδρομή σε αυτή τη σελίδα· και γι' αυτό η λειτουργία byte εδώ είναι αναφορά για μικρές τιμές και όχι υποκατάστατο του Base64 ή του Base91 σε πραγματικά αρχεία.

Τα τρία αλφάβητα, και γιατί το αλφάβητο είναι όλη η ιστορία

Οι χαρακτήρες ενός αλφαβήτου αποτελούν σταθερή ακολουθία, και η τιμή ενός χαρακτήρα είναι η θέση του σε αυτήν την ακολουθία. Η αλλαγή της σειράς αλλάζει τη σημασία κάθε χαρακτήρα. Τρεις διατάξεις χρησιμοποιούνται ευρέως, και αυτός είναι ο ίδιος αριθμός γραμμένος με τρεις τρόπους σε καθεμία:

Δεκαδικός0-9 έπειτα A-Z έπειτα a-z0-9 έπειτα a-z έπειτα A-ZA-Z έπειτα a-z έπειτα 0-9
000A
61zZ9
621010BA
12 3453D73d7DNH
1 234 567 8901LY7VK1ly7vkBViHfU

Αν διαβαστούν οι τρεις τελευταίες στήλες ως ένα αλφάβητο, είναι ένα συνεκτικό σύστημα. Αν διαβαστούν ως εναλλάξιμες, καταρρέουν, επειδή η αποκωδικοποίηση είναι τυφλή στο αλφάβητο με τον χειρότερο τρόπο: κάθε χαρακτήρας της εισόδου υπάρχει και στα τρία αλφάβητα, οπότε ένα λάθος αλφάβητο δεν παράγει κανένα σφάλμα, μόνο διαφορετικό αριθμό.

ΚωδικόςΑνάγνωση ως 0-9 A-Z a-zΑνάγνωση ως 0-9 a-z A-ZΑνάγνωση ως A-Z a-z 0-9
3D712 34513 957211 665
1LY7VK1 234 567 8901 624 950 79248 723 527 772

Η πεζότητα είναι δεύτερη, πιο οξεία εκδοχή της ίδιας παγίδας. Το Base62 διακρίνει πεζά και κεφαλαία σε κάθε διάταξη, οπότε η μετατροπή σε πεζά ξαναγράφει σιωπηλά τον κωδικό: το 1LY7VK είναι το 1 234 567 890 στο αλφάβητο ψηφίων-πρώτα, ενώ το 1ly7vk είναι το 1 624 950 792 στο ίδιο αλφάβητο· και τυχαίνει να είναι το 1 234 567 890 στο αλφάβητο ψηφίων-και-πεζών, επειδή αυτή η διάταξη είναι ακριβώς η ψηφίων-πρώτα με τις δύο θήκες των γραμμάτων αντιστραμμένες. Ούτε ο χαρακτήρας του μηδενός είναι κοινός: οι δύο διατάξεις με ψηφία πρώτα γράφουν το μηδέν ως 0, ενώ η διάταξη με γράμματα πρώτα το γράφει ως A, οπότε εκείνο το αλφάβητο δεν αρχίζει καθόλου με ψηφίο.

Το Base62 δίπλα στις άλλες κωδικοποιήσεις
ΚωδικοποίησηBit ανά χαρακτήραΜέγεθος σε σχέση με την είσοδοΣημειώσεις
Base16 (hex)4200%Δύο χαρακτήρες ανά byte, τετριμμένα αναγνώσιμο, χωρίς αλφάβητο για αναζήτηση.
Base325160%Χωρίς διάκριση πεζών και κεφαλαίων και ασφαλές για ανθρώπινη υπαγόρευση, το πιο σπάταλο της ομάδας.
Base36 (0-9 a-z)~5,17~155%Μόνο ψηφία και πεζά γράμματα, οπότε επιβιώνει σε διαδικασία μετατροπής σε πεζά. Το 12345 είναι 9ix.
Base58~5,86~137%Επιλέχθηκε για διευθύνσεις και όχι για πυκνότητα: τέσσερις όμοιοι χαρακτήρες παραλείπονται αντί να ταξινομούνται. Βλ. Base32 / Base58.
Base62~5,95~134%Κάθε χαρακτήρας είναι ψηφίο ή γράμμα, οπότε τίποτα δεν διαφεύγεται ποτέ. Η πυκνότητα βρίσκεται μεταξύ Base58 και Base64.
Base646133%Η προεπιλογή παντού, με το κόστος των +, / και =, των τριών χαρακτήρων που επιβάλλουν διαφυγή. Βλ. Μετατροπέας Base64.
Ascii85 / Base856,4125%5 χαρακτήρες ανά 4 byte, αλλά διαιρεί με 85 και το αλφάβητό του χρειάζεται εισαγωγικά. Βλ. Ascii85.
Base91~6,5~123%Το πυκνότερο από αυτά, και εκείνο του οποίου η έξοδος είναι λιγότερο ασφαλής για επικόλληση χωρίς διαφυγή. Βλ. Base91.

Τα ποσοστά είναι ασυμπτωτικά κόστη, στρογγυλοποιημένα· τα μετρημένα μήκη χαρακτήρων για ένα πραγματικό δείγμα 92 byte βρίσκονται στον πίνακα μεγεθών παραπάνω στη σελίδα. Στη λειτουργία ακεραίου η σύγκριση πηγαίνει αντίστροφα, επειδή η είσοδος είναι δεκαδικό κείμενο και όχι byte: εκεί το Base62 είναι περίπου 44% συντομότερο από τα ψηφία που αντικαθιστά, και το Base36 περίπου 36% συντομότερο, γι' αυτό ένας κωδικός αναγνωριστικού είναι συνήθως Base62 ή Base36 και όχι Base58.

Τι δεν είναι το Base62
  • Δεν είναι πρότυπο. Δεν υπάρχει RFC και καμία προδιαγραφή. Κανένας οργανισμός προτύπων δεν έχει ορίσει ποτέ το Base62, γι' αυτό το αλφάβητο δεν είναι εγγυημένο και γι' αυτό η σελίδα αυτή εκτυπώνει και τις τρεις διατάξεις αντί να επιλέγει σιωπηλά μία.
  • Δεν είναι κρυπτογράφηση. Είναι αλλαγή βάσης, τίποτα περισσότερο. Όποιος γνωρίζει το αλφάβητο την αντιστρέφει σε ένα πέρασμα, και δεν υπάρχει κλειδί, αλάτι ή μυστικότητα οποιουδήποτε είδους.
  • Δεν είναι συμπίεση. Η λειτουργία byte αυξάνει τα δεδομένα κατά περίπου ένα τρίτο. Η λειτουργία ακεραίου φαίνεται μόνο σαν συμπίεση, επειδή το δεκαδικό κείμενο είναι εξαρχής αναποτελεσματικός τρόπος γραφής αριθμού.
  • Δεν διακρίνει πεζά και κεφαλαία. Το Base32 μπορεί να γραφτεί με πεζά και να διαβαστεί ξανά· το Base62 δεν μπορεί. Ένας κωδικός που ταξιδεύει μέσα από σύστημα που κανονικοποιεί τα κεφαλαία είναι κατεστραμμένος κωδικός.
  • Δεν αυτοελέγχεται. Δεν υπάρχει άθροισμα ελέγχου ούτε χαρακτήρας ελέγχου, οπότε ένας μόνο λάθος χαρακτήρας δίνει αποτέλεσμα που μοιάζει έγκυρο με διαφορετική τιμή. Αν αυτό έχει σημασία, το αλφάβητο Bitcoin συνοδεύεται από άθροισμα ελέγχου — βλ. την ενότητα Base58Check στη σελίδα Base32 / Base58.
  • Δεν έχει σταθερό μήκος. Ο αριθμός των χαρακτήρων αυξάνεται με την τιμή, οπότε ένας μετρητής που αρχίζει από το 1 και φτάνει το 627 πηγαίνει από έναν χαρακτήρα σε οκτώ. Συμπληρώνεται σε σταθερό πλάτος όταν απαιτείται σταθερή στήλη.
Παγίδες που πράγματι δαγκώνουν
  • Το αλφάβητο είναι η απάντηση σε εννέα από τα δέκα μυστήρια. Αν ένα άλλο εργαλείο δίνει διαφορετικό κωδικό για τον ίδιο αριθμό, συγκρίνονται τα δύο αλφάβητα χαρακτήρα προς χαρακτήρα πριν υποψιαστεί κανείς σφάλμα. Ο παραπάνω πίνακας δείχνει την ίδια τιμή σε τρία αλφάβητα, και όλα είναι σωστά.
  • Ένα λάθος αλφάβητο αποτυγχάνει σιωπηλά. Δεν υπάρχει διαδρομή σφάλματος γι' αυτό: το 3D7 αποκωδικοποιείται σε 12 345, 13 957 ή 211 665 ανάλογα μόνο με τη διάταξη που θεωρείται. Ελέγχεται ο πρώτος χαρακτήρας, που είναι ο πιο πιθανός χαρακτήρας συμπλήρωσης μηδέν, και αν το αλφάβητο έχει ψηφία ή γράμματα μπροστά.
  • Τα αρχικά μηδενικά σημαίνουν δύο διαφορετικά πράγματα. Στη λειτουργία ακεραίου το 00012345 και το 12345 είναι ο ίδιος αριθμός και εκτυπώνονται ταυτόσημα. Στη λειτουργία byte ένα αρχικό μηδενικό byte είναι δεδομένο, και εκτυπώνεται ως ένας επιπλέον χαρακτήρας μηδέν. Η αφαίρεση ενός από αυτούς τους χαρακτήρες αλλάζει την ακολουθία byte.
  • Η κανονικοποίηση πεζών και κεφαλαίων καταστρέφει έναν κωδικό. Μια διεύθυνση email, ένα όνομα υπολογιστή ή μια διαδρομή Windows μπορεί να μετατραπεί σε πεζά κατά τη μεταφορά. Ένας κωδικός Base62 δεν μπορεί να επιβιώσει από αυτό, γι' αυτό υπάρχει ακόμη το Base36.
  • Οι μεγάλες είσοδοι είναι αργές, όχι μόνο μεγάλες. Η μετατροπή είναι αριθμητική σε ολόκληρη την είσοδο μαζί, οπότε η διπλασίωση του μήκους της εισόδου τετραπλασιάζει τον χρόνο. Αυτή η σελίδα αρνείται εισόδους πέρα από τα μετρημένα όριά της αντί να κολλά, και ο πίνακας μεγεθών παραπάνω δίνει τα μετρημένα νούμερα.
  • Μια συμβολοσειρά Base62 δεν αποδεικνύει τίποτα. Επειδή σχεδόν κάθε συμβολοσειρά ψηφίων και γραμμάτων αποκωδικοποιείται χωρίς παράπονο, ένα τυχαίο slug URL θα αποκωδικοποιηθεί σε κάποιον αριθμό. Ένας κωδικός έχει νόημα μόνο αν το σύστημα που τον εξέδωσε αποθηκεύει και την αντιστοιχία.
Σύντομες απαντήσεις

“Γιατί ένα άλλο εργαλείο Base62 δίνει διαφορετικό κωδικό για τον ίδιο αριθμό;”

Επειδή διαφέρει το αλφάβητο. Το Base62 δεν έχει προδιαγραφή με την οποία να διαφωνήσει κανείς, οπότε οι υλοποιήσεις επιλέγουν διάταξη: ψηφία και κεφαλαία πρώτα, ψηφία και πεζά πρώτα, ή γράμματα πριν από τα ψηφία. Με την αλλαγή του επιλογέα αλφαβήτου στην κορυφή της σελίδας εμφανίζονται και οι τρεις απαντήσεις δίπλα-δίπλα.

“Είναι το Base62 ασφαλές σε διεύθυνση URL;”

Ναι, και στις τρεις διατάξεις. Και οι 62 χαρακτήρες είναι μη διαφευγόμενα γράμματα και ψηφία, οπότε κανένας δεν αναπτύσσεται σε τριάδα ποσοστού σε μια παράμετρο ερωτήματος, και κανένας δεν τερματίζει διεύθυνση URL, τμήμα διαδρομής ή χαρακτηριστικό HTML. Αυτός είναι ο λόγος που οι σύντομοι σύνδεσμοι είναι Base62 και όχι Base64.

“Ποιο είναι μικρότερο, το Base62 ή το Base64;”

Για byte, το Base64 είναι ελαφρώς μικρότερο: περίπου 133% της εισόδου έναντι περίπου 134%. Στο δείγμα 92 byte παραπάνω, τα δύο ισοβαθμούν στους 124 χαρακτήρες. Για δεκαδικούς αριθμούς, το Base62 συντομεύει το κείμενο κατά περίπου 44%, και εκεί βρίσκεται το πρακτικό κέρδος.

“Μπορώ να αποκωδικοποιήσω μια συμβολοσειρά Base64 με αυτή τη σελίδα;”

Όχι, και δεν θα το δηλώσει ότι απέτυχε. Τα δύο αλφάβητα επικαλύπτονται σε όλους τους 62 χαρακτήρες, οπότε μια συμβολοσειρά Base64 συνήθως είναι «έγκυρη» είσοδος και εδώ και απλώς αποκωδικοποιείται σε διαφορετικό αριθμό. Για Base64 χρησιμοποιείται το Base64.

“Έχει ο κωδικός Base62 μέγιστο μήκος;”

Όχι, θεωρητικά ο αλγόριθμος δεν έχει όριο. Στην πράξη, αυτή η σελίδα σταματά στα 4 096 δεκαδικά ψηφία, ή στα 2 048 byte, επειδή η αριθμητική πίσω της είναι τετραγωνική και η καρτέλα θα πάγωνε χωρίς τίποτα στην οθόνη που να εξηγεί γιατί. Ο πίνακας ορίων παραπάνω στη σελίδα απαριθμεί τα μετρημένα νούμερα.

“Πώς ξέρω ότι το αποτέλεσμα αυτής της σελίδας είναι σωστό;”

Το κουμπί Αυτοέλεγχος εκτελεί κάθε τεκμηριωμένο δείγμα, κάθε μήκος byte από 0 έως 64 και ένα εύρος δεκαδικών αριθμών και στα τρία αλφάβητα, συγκρίνει τις επιστρεφόμενες τιμές με όσα μπήκαν, και ελέγχει εκ νέου ότι και οι 62 χαρακτήρες κάθε αλφαβήτου είναι ασφαλείς σε διεύθυνση URL. Το κουμπί Δείγμα συγκρίνει επιπλέον τα τρία αποτελέσματά του με τις τιμές που καταγράφονται στο αρχείο δεδομένων της σελίδας, οι οποίες επαληθεύτηκαν έναντι μιας δεύτερης, ανεξάρτητης υλοποίησης μεγάλων ακεραίων που φυλάσσεται στα εργαλεία δοκιμών του ιστότοπου.

Πρότυπα και αναφορές

Δεν υπάρχει πρότυπο προς υλοποίηση εδώ: το Base62 είναι σύμβαση, όχι προδιαγραφή, και τα τρία αλφάβητα που εκτυπώνονται παραπάνω είναι αυτά που εμφανίζονται σε πραγματικό λογισμικό. Αυτή η σελίδα το υλοποιεί με τις ρουτίνες μεγάλων ακεραίων του ιστότοπου, γραμμένες σε απλή αριθμητική πάνω σε πίνακες ψηφίων, ώστε κανένα μέγεθος να μην περιορίζεται ποτέ από τον τύπο αριθμού της JavaScript.

Το κείμενο της σελίδας γράφτηκε για αυτόν τον ιστότοπο. Κάθε εργασμένο παράδειγμα της σελίδας παράχθηκε από τον δικό της κώδικα και στη συνέχεια επαληθεύτηκε έναντι μιας δεύτερης, ανεξάρτητης υλοποίησης με εγγενείς μεγάλους ακέραιους, η οποία φυλάσσεται στα εργαλεία δοκιμών αυτού του ιστότοπου· η ίδια υλοποίηση επαλήθευσε και τους πίνακες δειγμάτων και μεγέθους του αρχείου δεδομένων.