Sqids ist eine kleine Open-Source-Bibliothek, die kurze, eindeutige, zufällig aussehende IDs aus Zahlen generieren kann.
Die beste Möglichkeit, darüber nachzudenken, ist wie ein Dezimal-Hexadezimal-Umwandler, jedoch mit einigen zusätzlichen Funktionen.
Linkverkürzung, Generierung eindeutiger Ereignis-IDs für Protokollierung, Erzeugung von IDs für Produkte/Objekte auf einer Website (ähnlich wie YouTube für Videos), Erzeugung kurzer IDs für Textnachrichten, Bestätigungscodes in E-Mails usw.
Alle Daten, die sensibel sind. Generierte IDs sind keine Hashes und könnten in Zahlen zurückdekodiert werden. Sie könnten zum Beispiel keine gute Wahl für Benutzer-IDs sein, da sie einmal dekodiert Ihre App-Benutzeranzahl preisgeben könnten.
Ja. Sqids kann eine oder viele nicht-negative Zahlen in eine einzelne ID encodieren. Es gibt keine Begrenzung, wie viele Zahlen Sie encodieren können, aber es gibt eine Grenze, wie groß eine Zahl sein kann (abhängig von der Implementierungssprache).
Dies ist aus mehreren Gründen nützlich: Sie könnten einen UNIX-Zeitstempel encodieren und ablaufende IDs erstellen oder eine Datenbank-Shard-Nummer zusammen mit einem Primärschlüssel encodieren und sich so zusätzliche Datenbankabfragen sparen.
Ja, generierte IDs sind einzigartig für die Eingabe und das Alphabet.
Denken Sie jedoch daran, dass das Standardalphabet sowohl Groß- als auch Kleinbuchstaben enthält, daher sind Standard-IDs Groß- und Kleinschreibung beachtend.
Sqids kann keine negativen Zahlen encodieren.
Die Mindestlänge des Alphabets beträgt 3 Zeichen.
Das Alphabet kann keine mehrbyte Zeichen enthalten.
Sqids kann keine IDs bis zu einer bestimmten Länge generieren, sondern nur mindestens eine bestimmte Länge. Der Bereich des Mindestlängenparameters liegt zwischen 0 und 255.
Sqids kann versuchen, IDs bis zur Alphabetlänge, abzüglich einer, zu regenerieren.
Die Bibliothek akzeptiert ein benutzerdefiniertes Alphabet, aus dem IDs generiert werden können. Mischen Sie einfach das Standardalphabet, das bereitgestellt wird.
Bitte beachten Sie, dass jemand bei ausreichendem Aufwand Ihr gemischtes Alphabet rückentwickeln könnte, daher handelt es sich keineswegs um eine Technik, um sensible Daten zu verstecken.
Das Standardalphabet finden Sie hier .
Sie können jedes der Online-Tools zum Umordnen von Zeichenfolgen oder unseren Playground verwenden.
Abhängig von Ihrem Anwendungsfall. Ein kürzeres Alphabet wird längere IDs produzieren, und ein längeres Alphabet wird kürzere IDs produzieren. Sie können den Playground verwenden, um zu testen, wie Ihre IDs aussehen könnten.
Ja. Beachten Sie, dass generierte IDs immer noch Zeichenketten sind und mit einer Null beginnen könnten.
Nein. Sqids unterstützt keine mehrbyte Zeichen für das Alphabet. Das schließt Emojis sowie viele andere Zeichen ein.
Die Bibliothek kann IDs mit Junkzeichen verlängern, um sie länger erscheinen zu lassen. Dies ist nützlich, damit nicht offensichtlich ist, ob Sie eine kleine Zahl wie 1 oder eine große Zahl wie 1000000 encodieren.
Das Decodieren ist nicht betroffen.
Ja, die Bibliothek akzeptiert einen Mindestlängenparameter, der garantiert, dass IDs mindestens diese Länge haben werden.
Bitte beachten Sie, dass es keine Garantie dafür gibt, wie lang Ihre IDs sein werden - nur dass sie nicht kürzer sein werden als die von Ihnen angegebene Länge.
Bis zu einem gewissen Punkt.
Die Festlegung einer maximalen Länge ist unmöglich, da Ihre IDs früher oder später bei ausreichend großem Input überlaufen werden. Deshalb wird nur der Mindestlängenparameter unterstützt, und die genaue Länge oder maximale Länge nicht.
Eine Blockliste kann verhindern, dass bestimmte Wörter in Ihren IDs erscheinen. Dies ist vorteilhaft, da generierte IDs dazu bestimmt sind, an öffentlichen Orten wie der URL angezeigt zu werden.
Sqids wird mit der Standard-Blockliste geliefert, die die grundlegendsten Schimpfwörter und unangemessenen Wörter aus mehreren Sprachen enthält. Sie können diese Blockliste natürlich um eigene Wörter erweitern.
Die Übereinstimmung von Blocklistenwörtern ist nicht auf Groß- und Kleinschreibung empfindlich.
Kurze Wörter mit weniger als 3 Zeichen werden nicht blockiert. Wörter mit 3 Zeichen müssen genau mit IDs übereinstimmen. Wörter mit 4 oder mehr Zeichen lösen einen Treffer aus, wenn sie ein Teil der ID sind.
Wenn Blocklist-Wörter Zahlen (Leetspeak) enthalten, lösen sie nur einen Treffer aus, wenn sie am Anfang oder Ende der ID stehen.
Die Standard-Blockliste enthält die gängigsten Schimpfwörter und unangemessenen Wörter aus mehreren Sprachen. Die komplette Liste finden Sie hier .
Wenn die generierte ID mit einem Wort in der Blockliste übereinstimmt, versucht die Bibliothek, sie neu zu generieren.
Wenn jeder einzelne Versuch, die ID neu zu generieren, fehlschlägt, wird die Encode-Funktion fehlschlagen und einen Fehler zurückgeben. Die Bearbeitung dieses Fehlers liegt beim Benutzer.
Der beste Weg, die Anzahl der Regenerationsversuche zu verringern, besteht darin, ein längeres Alphabet zu haben, keine Mindestlänge festzulegen und eine kleinere Blockliste bereitzustellen. Das Bereitstellen einer leeren Blockliste deaktiviert die Funktion vollständig.
Das Decodieren von IDs wird normalerweise eine Art numerische Ausgabe erzeugen, aber das bedeutet nicht unbedingt, dass die ID kanonisch ist. Um zu überprüfen, ob die ID gültig ist, können Sie decodierte Zahlen erneut encodieren und überprüfen, ob die ID übereinstimmt.
Der Grund, warum dies nicht automatisch erfolgt, ist, dass wir nicht möchten, dass bei einer zukünftigen Änderung der Standard-Blockliste automatisch die ID ungültig wird, die in der Vergangenheit generiert wurde und möglicherweise jetzt mit einem neuen Blocklistenwort übereinstimmt.
Wir werden sicherstellen, das CHANGELOG zu aktualisieren, wenn und falls sich die Standard-Blockliste ändert.
Sie müssen Szenarien berücksichtigen, in denen ein neues Wort in die Standard-Blockliste aufgenommen wird. In diesem Fall kann das erneute Codieren von Zahlen eine andere ID erzeugen.
Der beste Weg, sicherzustellen, dass Ihre IDs auch bei zukünftigen Updates konsistent bleiben, besteht darin, eine benutzerdefinierte Blockliste bereitzustellen, auch wenn sie identisch mit der aktuellen Standard-Blockliste ist.
Nein, das Codieren unterschiedlicher Zahlen ergibt eindeutige IDs.
Allerdings können aufgrund des Algorithmus-Designs beim Decodieren zufälliger IDs manchmal die gleichen Zahlen erzeugt werden. Der beste Weg, zu überprüfen, ob die ID kanonisch ist, besteht darin, einfach decodierte Zahlen erneut zu codieren und zu überprüfen, ob die ID übereinstimmt.
Hashids war die erste Version dieser Bibliothek, die ungefähr 2013 herauskam. Sie erzeugte auch kurze IDs, verwendete jedoch eine etwas andere Methode.
Hashids behandelte einige Dinge anders.
Es unterstützte keine benutzerdefinierte Blockliste, sondern verließ sich stattdessen auf die häufigsten englischen Schimpfwörter. Es verwendete auch den salt-Parameter, um das Alphabet zu mischen, was ein wenig verwirrend war, weil die Bibliothek nichts mit Verschlüsselung zu tun hat. Außerdem verwendete es zu viele reservierte Zeichen, was zu längeren IDs führte.
Deshalb haben wir beschlossen, ein Upgrade durchzuführen und neu zu positionieren. Der Algorithmus wurde vereinfacht, einige Funktionen wurden hinzugefügt, und die Code-Repositories sind jetzt alle unter einem Dach .
Der salt-Parameter wurde verwendet, um das Alphabet zu mischen, und er sollte nie mit Sicherheit oder Schutz in Verbindung gebracht werden. Sowohl Hashids als auch Sqids arbeiten ähnlich wie die Dezimal- zu Hexadezimalumwandlung, jedoch mit einigen Anpassungen. Es gibt keine Art von Verschlüsselung, daher wurde dieser Parameter vollständig entfernt, um Verwirrung zu vermeiden.
Nein, Sqids erweitert die Funktionalität von Hashids und hat unterschiedliche Designziele und Anforderungen; daher sind die generierten IDs nicht mit Hashids kompatibel.
Da es keine Kompatibilität zwischen Hashids und Sqids gibt, ist es unmöglich, einfach Hashids durch Sqids zu ersetzen.
Sie können sie jedoch zusammenführen, indem Sie unterscheiden, welches ID zu welcher Bibliothek gehört.
Eine Möglichkeit, dies zu tun, ist die ID-Länge - wenn Sie zu Sqids wechseln, können Sie eine höhere Mindestlänge angeben. Eine andere Möglichkeit ist das manuelle Anhängen/Voranstellen eines benutzerdefinierten Zeichens an die neu generierten IDs.
Schließlich könnten Sie auch versuchen, eine ID mit Hashids zu decodieren, um zu sehen, ob sie gültig ist. Wenn nicht, decodieren und codieren Sie sie mit Sqids, um zu sehen, ob das funktioniert.
Jede Sprachimplementierung auf dieser Website verlinkt zum originalen Hashids-Repository, sofern vorhanden.
Wenn Sie das Projekt unterstützen möchten, würden wir es begrüßen, wenn Sie unsere Repos auf Github mit einem Stern versehen, um die Sichtbarkeit zu erhöhen.
Wenn Sie ein Entwickler sind und keine Implementierung von Sqids für eine bestimmte Sprache sehen, helfen Sie uns bitte, die Bibliothek umzusetzen. Das Gleiche gilt für eine Programmiersprache, die nicht aufgeführt ist.
Wenn Sie einen Fehler in der Spezifikation oder einer der Implementierungen sehen, erstellen Sie bitte ein Problem oder einen Pull-Request mit einem vorgeschlagenen Fix im entsprechenden Repository.
Wenn Sie mehrere Sprachen sprechen, könnten wir Ihre Hilfe beim Feinabstimmen der Blockliste und beim Anpassen der Website-Übersetzungen gebrauchen, wenn Sie Probleme sehen.
Schließlich, wenn Sie Erfahrung mit Hashids/Sqids haben, helfen Sie bitte unserer Community, indem Sie Fragen beantworten, die jemand haben könnte.
Wenn Sie Sqids in eine der folgenden Sprachen portieren möchten (oder in eine neue, die hier nicht aufgeführt ist):
D , Io , Raku , Smalltalk , T-SQL , Tcl , VBA
Forken Sie das offizielle Repo in Ihr eigenes Github-Konto und implementieren Sie die Spezifikation zusammen mit allen Tests. Sie können eines der vorhandenen READMEs wiederverwenden (Beispiel ).
Sobald die Bibliothek fertig ist, erstellen Sie einen Pull-Request. Nach der Zusammenführung werden wir die Website aktualisieren.
Wenn das Repo keine aktiven Maintainer hat, würden wir uns freuen, Sie einzuladen, das Repo zu verwalten und offizieller Maintainer zu werden.