15. Apr 2024
Lesedauer 12 Min.
IDs im Kurzformat
Sqids.NET
Eindeutige Kennungen sind in vielen Bereichen notwendig. Sqids.NET erzeugt eindeutige, nichtsequenzielle und profanitätsfreie IDs in .NET.

Identifikatoren (IDs) spielen eine zentrale Rolle in der digitalen Welt, indem sie die eindeutige Erkennung und Unterscheidung von Objekten und Daten, beispielsweise Produkten und Benutzern, ermöglichen. Traditionell nutzten Systeme lange, komplexe IDs, wie zum Beispiel Universally Unique Identifiers (UUIDs), um eine hohe Einzigartigkeit zu gewährleisten. In bestimmten Anwendungsfällen stellen solche langen IDs aber eine Herausforderung dar, wie etwa bei der Benutzerfreundlichkeit oder der Speichereffizienz. Kurze IDs bieten hier eine Alternative, die nicht nur platzsparend, sondern auch leichter zu handhaben ist, beispielsweise in Umgebungen, wo die Lesbarkeit von Identifikatoren wichtig ist.In diesem Kontext tritt Sqids.NET auf die Bühne – eine Bibliothek, die speziell für die .NET-Plattform entwickelt wurde, um Entwicklern die Erzeugung von kurzen, aber dennoch einzigartigen IDs zu erleichtern. Sqids.NET adressiert die Balance zwischen der Kompaktheit der Identifikatoren und der Aufrechterhaltung einer ausreichenden Einzigartigkeit, um Kollisionen zu vermeiden.Der Fokus dieser Episode von „Frameworks und mehr“ liegt auf der Bibliothek Sqids.NET.
i -> 1, l -> 1 und o -> 0 berücksichtigt. Damit werden auch Wörter und Mutationen wie l0w, 1ow und dergleichen für den Begriff low gefiltert.Die Bibliothek hat auch einige Limitierungen. Sqids.NET ist beispielsweise nicht in der Lage, negative Zahlen zu codieren. Darüber hinaus ist die minimale Länge für ein Alphabet auf drei Zeichen festgelegt. Zeichen, die aus mehreren Bytes bestehen (Multibyte Characters), lassen sich nicht in einem Alphabet nutzen. Bei den generierten IDs ist es zudem nicht garantiert, dass diese eine bestimmte Maximallänge einhalten. Nur eine minimale Länge ist garantiert.
Was ist Sqids.NET?
Sqids.NET [1] ist eine .NET-Bibliothek zur Erzeugung und Verwaltung von kurzen, einzigartigen Identifikatoren, auch kurze IDs oder Short IDs genannt. Wie der Name vermuten lässt, sind diese Short IDs kürzer als herkömmliche UUIDs oder GUIDs und bieten dennoch eine hohe Kollisionssicherheit, was sie ideal für Systeme macht, in denen Speicherplatz und Effizienz von entscheidender Bedeutung sind. Der primäre Zweck von Sqids.NET liegt darin, eine leistungsfähige, einfach zu verwendende Lösung für Anwendungsfälle zu bieten, bei denen kurze, eindeutige Kennungen erforderlich sind, wie beispielsweise in URL-Verkürzern (URL Shortener), datenbankgestützten Anwendungen und bei der Generierung von eindeutigen Referenzcodes zum Beispiel für E-Commerce-Plattformen.Lange Zeit war das Projekt unter dem Namen Hashids [2] bekannt, wurde dann aber umbenannt, als Marke angepasst und firmiert jetzt als Sqids-Bibliothek. Die .NET-Implementierung ist nur eine von vielen. Die Funktionen stehen zum Beispiel unter C, C++, Dart, Elm, Go, Haskell, Java, JavaScript, PHP, Ruby, Scala und vielen weiteren Programmiersprachen und Plattformen zur Verfügung.Seit seiner Einführung hat Sqids.NET eine signifikante Entwicklung durchgemacht, unterstützt durch eine aktive Community und das Feedback von Nutzern aus den verschiedensten Anwendungsbereichen. Neue Features und Verbesserungen werden kontinuierlich implementiert, um die Bibliothek an die sich ändernden Anforderungen der Industrie und der Entwicklergemeinschaft anzupassen. Die Entwickler hinter Sqids.NET legen großen Wert auf Sicherheit, Leistung und Anpassungsfähigkeit, um sicherzustellen, dass die Bibliothek auch in Zukunft eine führende Lösung für die Generierung von Short IDs bleibt.Hauptmerkmale von Sqids.NET
Sqids.NET [3] wurde speziell für die .NET-Plattform entwickelt und unterstützt somit eine breite Palette von Programmiersprachen, die unter .NET laufen, wie C#, VB.NET und F#, da die Bibliothek CLS-compliant ist. Da .NET eine vielseitige Plattform für die Entwicklung von Anwendungen verschiedenster Art ist – von Webanwendungen über Desktop-Software bis hin zu mobilen Apps –, bietet Sqids.NET eine hohe Flexibilität in der Anwendungsentwicklung.Die Funktionen des Projekts eignen sich gut für die Codierung von Primärschlüsseln, wenn eine relationale Datenbank zum Einsatz kommt. Auch das Speichern von Datenbankabfragen durch die Codierung mehrerer Objekte ist ein guter Anwendungsfall.Der Einsatz von Sqids.NET ist nicht sinnvoll, wenn sensible Daten im Spiel sind, da es sich nicht um eine Verschlüsselungsbibliothek handelt. Auch sensitive Daten wie User IDs sind kein guter Anwendungsfall, da die Daten decodierbar sind. Gelingt das, könnten die Informationen gegen eine Anwendung zum Einsatz kommen.Die Kernfunktion von Sqids.NET ist die Generierung von kurzen, einzigartigen Identifikatoren. Diese IDs sind kürzer als herkömmliche UUIDs, was sie besonders geeignet für Anwendungsfälle macht, bei denen die Länge der ID von Bedeutung ist – beispielsweise für die Nutzung in URLs oder als Teil von QR-Codes. Die Bibliothek codiert dabei Zahlen wie zum Beispiel 127 in IDs wie yc3.Sqids.NET bietet eine hohe Kollisionssicherheit, was bedeutet, dass die Wahrscheinlichkeit, dass zwei generierte IDs identisch sind, gering ist. Dies wird durch einen Algorithmus erreicht, der eine Balance zwischen Kürze und Einzigartigkeit der IDs sicherstellt. Darüber hinaus lassen sich die generierten IDs immer in die ursprünglichen Zahlen zurückdecodieren. Wer sich für die Spezifikation von Sqids interessiert, findet ein eigenes Repository [4] auf GitHub mit ebendiesen Informationen zur Spezifikation.Ein weiteres wichtiges Merkmal von Sqids.NET ist seine Anpassungsfähigkeit. Entwickler können die Generierung der IDs nach ihren Bedürfnissen konfigurieren, beispielsweise in Bezug auf die Länge der ID oder die verwendeten Zeichen. Dies ermöglicht eine flexible Anwendung in verschiedenen Kontexten und Anforderungen, da sich die erzeugten IDs auf eine Anwendung hin konfigurieren lassen. Damit sind diese IDs nicht dieselben wie bei allen anderen Projekten, die Sqids.NET ebenfalls nutzen. Das funktioniert über die Nutzung eines gemischten Alphabets. Die Codierung aufeinanderfolgender Zahlen (1, 2, 3 ...) ergibt zudem völlig unterschiedlich aussehende IDs.Ein weiteres, nützliches Feature betrifft mehrere Zahlen. In einer einzigen ID lassen sich mehrere Quellzahlen bündeln. Die ID lässt sich anschließend wieder in dieselbe Reihe von Zahlen decodieren. Zudem stellt die Bibliothek sicher, dass die erzeugten IDs keine Schimpfwörter enthalten, sodass die IDs gefahrlos dort zum Einsatz kommen können, wo Endbenutzer sie sehen können, wie in URLs. Dieser Schimpfwortfilter nutzt eine Blocklist, für die es ein eigenes Repository [5] bei GitHub gibt. Um möglichst viele Begriffe und Mutationen zu erfassen, ist eine Transformation implementiert, die auchi -> 1, l -> 1 und o -> 0 berücksichtigt. Damit werden auch Wörter und Mutationen wie l0w, 1ow und dergleichen für den Begriff low gefiltert.Die Bibliothek hat auch einige Limitierungen. Sqids.NET ist beispielsweise nicht in der Lage, negative Zahlen zu codieren. Darüber hinaus ist die minimale Länge für ein Alphabet auf drei Zeichen festgelegt. Zeichen, die aus mehreren Bytes bestehen (Multibyte Characters), lassen sich nicht in einem Alphabet nutzen. Bei den generierten IDs ist es zudem nicht garantiert, dass diese eine bestimmte Maximallänge einhalten. Nur eine minimale Länge ist garantiert.
Short IDs im Blick
Short IDs sind kürzere Versionen traditioneller Identifikatoren, die zur eindeutigen Kennzeichnung von zum Beispiel Objekten, Nutzern oder Transaktionen verwendet werden. Ihre Hauptbedeutung liegt in der Kompaktheit und Effizienz dieser IDs. Im Vergleich zu traditionellen Identifikationssystemen, wie zum Beispiel den weit verbreiteten Universally Unique Identifiers (UUIDs), bieten Short IDs eine deutlich kürzere Darstellungsform. Während UUIDs typischerweise 36 Zeichen (inklusive Bindestriche) umfassen, lassen sich Short IDs auf eine Länge von nur wenigen Zeichen reduzieren. Diese Reduktion der Länge führt jedoch nicht zu einer signifikanten Einbuße der Einzigartigkeit oder Kollisionssicherheit, vorausgesetzt, die Generierungsmethodik ist sorgfältig ausgelegt.Die Vorteile von Short IDs liegen vor allem in ihrer Effizienz und Skalierbarkeit. Aufgrund ihrer Kürze sind sie einfacher zu teilen und zu merken, was die Nutzererfahrung verbessert. In Bezug auf die Speichereffizienz benötigen Short IDs weniger Speicherplatz in Datenbanken, was besonders in groß angelegten Systemen mit Millionen von Einträgen von Bedeutung ist. Darüber hinaus können sie die Geschwindigkeit der Datenübertragung positiv beeinflussen, da weniger Daten über das Netzwerk gesendet werden müssen.Allerdings haben Short IDs auch Nachteile. Einer der Hauptnachteile ist das potenziell erhöhte Risiko von Kollisionen, da die Anzahl der möglichen einzigartigen Kombinationen mit der Reduzierung der Länge abnimmt. Dies erfordert ausgeklügelte Algorithmen und Strategien zur Kollisionsvermeidung, um die Einzigartigkeit der IDs auch bei hohem Volumen sicherzustellen. Ein weiterer Punkt ist, dass die Sicherheit von Short IDs in bestimmten Anwendungsfällen eine Herausforderung darstellen kann. Da sie leichter zu erraten sind als längere Identifikatoren, sind zusätzliche Sicherheitsmaßnahmen zu ergreifen, um Missbrauch zu verhindern.Installation
Sqids.NET lässt sich durch das NuGet-Paket nahtlos in bestehende .NET-Projekte integrieren, beispielsweise über einen der zahlreichen Paketmanager für .NET. Nach der Installation stehen die Funktionen ohne umfangreiche Konfiguration zur Verfügung, was die Integration in eigene Projekte beschleunigt. Das ist insgesamt sehr effizient, da Entwickler nicht von Grund auf eigene Systeme zur ID-Generierung entwickeln müssen.Sqids.NET ist als .NET-Bibliothek konzipiert und setzt daher voraus, dass das .NET Framework oder .NET Core auf dem Entwicklersystem installiert ist. Sqids.NET ist kompatibel mit allen .NET-basierten Plattformen und Frameworks. Dazu gehören .NET Core, .NET Framework und .NET 5/6, was die Bibliothek für eine Vielzahl von Anwendungen, von Web über Desktop bis hin zu mobilen Anwendungen, nutzbar macht. Abhängigkeiten zu anderen Bibliotheken sind minimal, da Sqids.NET darauf ausgelegt ist, eigenständig zu funktionieren. Die Nutzung von Sqids.NET unterliegt der MIT-Lizenz. Das Projekt ist Open Source und der Quelltext liegt auf GitHub [6]. Beim Schreiben dieses Artikels ist Version 3.1.0 von Anfang Dezember 2023 die aktuelle Ausgabe des Projekts.Erste Beispiele
Sqids.NET unterstützt alle integralen Typen auf Basis der generischen Math-Implementierung von .NET 7 (Generic Math). Das bedeutet, dass die Bibliothek zum Codieren/Decodieren von Zahlen jedes ganzzahligen numerischen Typs in .NET zum Einsatz kommen kann, einschließlich int, long, ulong, byte und dergleichen.Das Listing 1 zeigt ein erstes, einfaches Beispiel aus einer Konsolenanwendung. Dreh- und Angelpunkt ist der SqidsEncoder, der den Typ der Quellzahlen übergeben bekommt. Durch die Encode-Methode lassen sich die zu codierenden IDs angeben, die dann in die neue Short ID umgewandelt wird. Den umgekehrten Prozess übernimmt die Decode-Methode. Die Ausgabe auf dem Terminal sieht wie folgt aus:Listing 1: Das Codieren und Decodieren von IDs
<span class="hljs-keyword">using</span> Sqids;<br/><span class="hljs-keyword">var</span> sqids = <span class="hljs-keyword">new</span> SqidsEncoder&lt;<span class="hljs-keyword">int</span>&gt;();<br/><span class="hljs-keyword">var</span> id = sqids.Encode(<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>);<br/><span class="hljs-keyword">var</span> numbers = sqids.Decode(id);<br/>Console.WriteLine(<span class="hljs-string">$"Generated Short ID: <span class="hljs-subst">{id}</span>"</span>);<br/>Console.WriteLine(<br/> <span class="hljs-string">$"Decoded IDs: <span class="hljs-subst">{<span class="hljs-keyword">string</span>.Join(<span class="hljs-string">","</span>, numbers)}</span>"</span>);
Generated Short <span class="hljs-string">ID:</span> <span class="hljs-number">86</span>Rf07
Decoded <span class="hljs-string">IDs:</span> <span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>
Wie bereits erwähnt, lassen sich so mehrere IDs auf einmal codieren und auch wieder decodieren.Sind diese IDs doch zu kurz, lässt sich problemlos die Mindestlänge anpassen. Das realisiert die minimale Anpassung aus Listing 2. Die Option für die Mindestlänge verändert ebendiese, sodass die Ausgabe der neu erzeugten ID auf der Konsole wie folgt aussieht:
Listing 2: Die minimale Länge einer ID festlegen
<span class="hljs-keyword">var</span> sqidsLonger = <span class="hljs-keyword">new</span><span class="hljs-type"></span> SqidsEncoder&lt;int&gt;(<span class="hljs-keyword">new</span><span class="hljs-type"></span>()<br/>{<br/> MinLength = <span class="hljs-number">15</span>,<br/>});
Generated <span class="hljs-keyword">Short</span> ID: UKkLWZg9DAJQ7Xl
Sqids.NET bietet verschiedene Konfigurationsoptionen, um die Generierung der Short IDs an spezifische Anforderungen anzupassen. Entwickler können beispielsweise die Länge der IDs, den Zeichensatz, aus dem die IDs generiert werden, und andere Parameter konfigurieren. Das Listing 3 zeigt eine weitere, wichtige Option: die Anpassung des genutzten Alphabets. Dadurch lässt sich sehr fein einstellen, welche Zeichen in den erzeugten Short IDs zur Anwendung kommen und welche nicht. Für viele Anwendungsbereiche ist das eine wichtige Option, insbesondere dann, wenn Nutzer die IDs sehen und verwenden sollen.
Listing 3: Das Anpassen des verwendeten Alphabets für IDs
<span class="hljs-keyword">var</span> sqids = <span class="hljs-keyword">new</span><span class="hljs-type"></span> SqidsEncoder&lt;int&gt;(<span class="hljs-keyword">new</span><span class="hljs-type"></span>()<br/>{<br/> Alphabet = <span class="hljs-string">"k3G7QAe51FCsPW92uEOyq4Bg6Sp8YzVTmnU0liwDdHXLajZrfxNhobJIRcMvKt"</span>,<br/>});
Weitere Anwendungsfälle
Die ersten Anpassungen der erzeugten IDs haben die vorherigen Beispiele gezeigt. Benutzerdefinierte Längen und Alphabete erlauben zusätzliche Anwendungsfälle, in denen die IDs besondere Merkmale aufweisen müssen. Diese Anpassungen betreffen aber auch die Blockliste für Wörter, die im Standard zwar schon sehr groß ist, in bestimmten Anwendungsfällen aber zusätzlich bestimmte Wörter umfassen muss. Eine solche benutzerdefinierte Liste lässt sich ebenfalls einstellen, wie das Listing 4 zeigt. Das vermeidet IDs, die diese Wörter umfassen.Listing 4: Eine eigene Blocklist mit für IDs gesperrten Wörtern anlegen
<span class="hljs-keyword">var</span> sqids = <span class="hljs-keyword">new</span><span class="hljs-type"></span> SqidsEncoder&lt;int&gt;(<span class="hljs-keyword">new</span><span class="hljs-type"></span>()<br/>{<br/> BlockList = { <span class="hljs-string">"eine"</span>, <span class="hljs-string">"benutzerdefinierte"</span>, <span class="hljs-string">"blockliste"</span>, <span class="hljs-string">"für"</span>, <span class="hljs-string">"sqids"</span> },<br/>});
In Kombination mit dem Pattern Matching von C# lassen sich einzelne Zahlen als Eingabe direkt prüfen und decodieren. Das erlaubt sehr kompakte Schreibweisen, wie die folgende Zeile zeigt:
<span class="hljs-keyword">if</span> (sqids.Decode(<span class="hljs-built_in">id</span>) <span class="hljs-keyword">is</span> [var <span class="hljs-built_in">number</span>]) {
Diese Anweisung stellt sicher, dass das decodierte Ergebnis genau eine Zahl ist, die wir direkt weiterverwenden können. Mehrere Zahlen werden ebenso abgewiesen wie ein leeres Array, was die Decode-Methode zurückgeliefert, wenn die Eingabe ungültig ist.Eine weitere wichtige Prüfung ist die auf kanonische IDs. Das bedeutet, dass im Code geprüft werden sollte, ob eine ID tatsächlich das Resultat einer korrekten Codierung und Decodierung ist und nicht zufällig erraten wurde. Der Hintergrund ist, dass das Decodieren von zufälligen Zeichenketten in der Praxis zu einer realen ID werden kann. Mit den Standardeinstellungen ist das Resultat für die Short IDs 2fs und OSc die gleiche decodierte Zahl 3168. Wenn diese Zahl aber wiederum mit Sqids.NET codiert wird, ist das Resultat OSc. Genau dieser Umstand lässt sich im Code prüfen, wie die nachfolgenden zwei C#-Zeilen verdeutlichen:
<span class="hljs-attribute">var decoded</span> = sqids.Decode(incomingId);
<span class="hljs-attribute">b</span><span class="hljs-attribute">o</span><span class="hljs-attribute">o</span><span class="hljs-attribute">l</span> <span class="hljs-attribute">i</span><span class="hljs-attribute">s</span><span class="hljs-attribute">C</span><span class="hljs-attribute">a</span><span class="hljs-attribute">n</span><span class="hljs-attribute">o</span><span class="hljs-attribute">n</span><span class="hljs-attribute">i</span><span class="hljs-attribute">c</span><span class="hljs-attribute">a</span><span class="hljs-attribute">l</span> = incomingId == sqids.Encode(decoded);
Der Ausdruck evaluiert nur zu true, wenn die Eingabe OSc ist, und nicht für andere, zufällige Zeichenketten, die ebenfalls zur gleichen ID decodiert werden können.
Vergleich mit alternativen Bibliotheken und Technologien
Sqids.NET ist längst nicht die einzige Möglichkeit, IDs zu erzeugen. Es gibt eine Reihe von alternativen Bibliotheken und Technologien, um ähnliche IDs zu erzeugen – nicht zwingend kurze, aber eindeutige.- Universally Unique Identifier (UUID) oder in der Microsoft-Welt als Globally Unique Identifier (GUID) bekannt, ist ein 128 Bit langer Identifikator, der für die Erzeugung von IDs weit verbreitet ist. Die Standardimplementierung ist in vielen Programmiersprachen und Plattformen integriert.
- In Datenbanksystemen werden häufig numerische Identifikatoren verwendet, die bei jedem neuen Datensatz automatisch um eins erhöht werden. Sie sind einfach zu implementieren und zu verstehen, bieten jedoch keine Einzigartigkeit über die einzelne Datenbank hinaus und lassen sich unter Umständen sehr einfach erraten.
- Viele moderne Datenbankmanagementsysteme bieten eigene Funktionen zur Generierung einzigartiger Schlüssel, wie zum Beispiel SEQUENCE in SQL-basierten Systemen oder ObjectId in MongoDB.
- Es kann auch eine Option sein, Hash-Funktionen zur Erstellung von Identifikatoren aus anderen Daten zu verwenden. Allerdings können Hashes kollidieren, und die Einzigartigkeit ist nicht garantiert.
- Oder man verwendet eine Kombination aus mehreren Feldern oder Werten, um Einzigartigkeit in einem bestimmten Kontext zu gewährleisten. Diese Methode wird oft in relationalen Datenbanken verwendet, kann aber die Komplexität erhöhen.
- Daneben gibt es noch selbst entwickelte Lösungen, die spezifische Anforderungen an Einzigartigkeit, Länge und Format berücksichtigen. Diese erfordern jedoch zusätzlichen Entwicklungsaufwand und sind sorgfältig zu testen, um die Einzigartigkeit sicherzustellen.
- NanoID [7] ist eine kleine, sichere und URL-freundliche Bibliothek für JavaScript, die zufällige IDs ähnlich wie UUID generiert, jedoch mit einer anpassbaren Länge, die deutlich kürzer sein kann. NanoID und Sqids.NET teilen das Ziel, kürzere Identifikatoren zu erzeugen, unterscheiden sich jedoch in der primären Plattform. Während NanoID hauptsächlich für JavaScript-Entwicklungen konzipiert ist, richtet sich Sqids.NET an die .NET-Umgebung. Die Wahl beider hängt stark vom verwendeten Technologie-Stack ab.
- ShortUUID [8] ist eine Bibliothek, die eine kürzere, URL-freundliche Version von UUIDs generiert, indem sie die Darstellung von UUIDs in eine kürzere Zeichenkette umwandelt. Sie ist in verschiedenen Sprachen verfügbar, darunter Python. Im Gegensatz zu Sqids.NET, das speziell für .NET entwickelt wurde, hat ShortUUID einen breiteren Ansatz mit Implementierungen in mehreren Sprachen. Der Hauptunterschied liegt in der Herangehensweise: Während Sqids.NET direkt kurze IDs generiert, konvertiert ShortUUID existierende UUIDs in kürzere Versionen.
Fazit
Short IDs haben sich als wertvolle Alternative zu traditionellen, längeren Identifikatoren etabliert, insbesondere in Anwendungsbereichen, wo Kompaktheit, Effizienz und Benutzerfreundlichkeit im Vordergrund stehen. Sie bieten eine praktische Lösung für die Herausforderungen, die mit der Speicherung, Übertragung und Verarbeitung von Daten verbunden sind, und verbessern die Nutzererfahrung durch leichter merkbare und teilbare Identifikatoren. Die Anpassungsfähigkeit von Short IDs ermöglicht es Entwicklern, die Balance zwischen Einzigartigkeit und Kürze je nach den spezifischen Anforderungen ihrer Projekte zu finden.Sqids.NET bietet eine effektive Lösung für die Generierung von kurzen, einzigartigen Identifikatoren innerhalb der .NET-Plattform.Durch seine Unterstützung für verschiedene Programmiersprachen und die einfache Integration in bestehende Projekte stellt Sqids.NET ein wertvolles Werkzeug für Entwickler dar, die in der .NET-Umgebung arbeiten.Die Kernfunktionen und -fähigkeiten der Bibliothek, einschließlich der Anpassungsfähigkeit und hohen Kollisionssicherheit, machen sie zu einer idealen Wahl für Anwendungen, in denen die Effizienz und Kompaktheit von Identifikatoren von entscheidender Bedeutung sind.Das deckt sich sehr gut mit den Anforderungen an Short IDs, sodass Sqids.NET als Bibliothek eine gute Wahl ist. Das Projekt verdient sich daher ein „Sehr gut“ inklusive Empfehlung. Wer schnell und unkompliziert kurze IDs erzeugen möchte, sollte einen Blick auf die Bibliothek werfen.Fussnoten
- Die Website von Sqids, https://sqids.org
- Das Repository zu Hashids auf GitHub, https://github.com/hashids
- Die Website zu Sqids.NET, https://sqids.org/dotnet
- Das Repository zur Sqids-Spezifikation auf GitHub, http://www.dotnetpro.de/SL2405Frameworks1
- Die Blocklist von Sqids auf GitHub, http://www.dotnetpro.de/SL2405Frameworks2
- Das Repository zu Sqids.NET auf GitHub, http://www.dotnetpro.de/SL2405Frameworks3
- Das Repository zum Projekt NanoID auf GitHub, http://www.dotnetpro.de/SL2405Frameworks4
- Das Repository zu ShortUUID auf GitHub, http://www.dotnetpro.de/SL2405Frameworks5