Hashids ist eine kleine JavaScript-Bibliothek, um youtube-ähnliche IDs aus Zahlen zu generieren. Verwenden Sie es, wenn Sie Ihre Datenbank -IDs nicht dem Benutzer vorstellen möchten: http://hashids.org/javascript
Installieren Sie Hashide über:
yarn add hashids (oder verwenden Sie den Code direkt bei dist/hashids.js )
import Hashids from 'hashids'
const hashids = new Hashids ( )
console . log ( hashids . encode ( 1 ) ) const Hashids = require ( 'hashids/cjs' )
const hashids = new Hashids ( )
console . log ( hashids . encode ( 1 ) ) Hinweis: Wenn Sie einen Knoten verwenden, der bedingte Exporte unterstützt, funktioniert require('hashids') (Version> = 13) ebenfalls.
< script type =" text/javascript " src =" hashids.min.js " > </ script >
< script type =" text/javascript " >
var hashids = new Hashids ( ) ;
console . log ( hashids . encode ( 1 ) ) ;
</ script > import oder require , basierend auf der Umgebung (siehe oben). Wenn Sie die CommonJS -Modulsyntax ( require ) verwenden möchten, müssen Sie die Node.js -Typen aus dem DefinitelyTyped Repository installieren.
npm install @types/node
Wenn Sie die ESM -Syntax ( import Hashids from 'hashids' ) verwenden möchten, müssen Sie die folgenden Optionen in Ihre tsconfig.json aufnehmen.
{
"allowSyntheticDefaultImports" : true ,
"esModuleInterop" : true
} Das obige ist nicht erforderlich, wenn Sie die CommonJS -Version direkt importieren: import Hashids from 'hashids/cjs' .
Wenn Sie Fehler erhalten, die feststellen: Fügen Sie "esnext.bigint" oder "esnext" Cannot find name 'BigInt' zu Ihrer tsconfig.json -Datei unter "lib" hinzu:
{
"compilerOptions" : {
...
"lib" : [
" esnext.bigint " ,
...
]
}
} Beachten Sie, dass Ihre Umgebung BigInt nicht dafür unterstützen muss, dass Hashide funktionieren.
const hashids = new Hashids ( )
const id = hashids . encode ( 1 , 2 , 3 ) // o2fXhV
const numbers = hashids . decode ( id ) // [1, 2, 3] Ein paar weitere Möglichkeiten, um an encode() zu gelangen:
const hashids = new Hashids ( )
console . log ( hashids . encode ( 1 , 2 , 3 ) ) // o2fXhV
console . log ( hashids . encode ( [ 1 , 2 , 3 ] ) ) // o2fXhV
// strings containing integers are coerced to numbers:
console . log ( hashids . encode ( '1' , '2' , '3' ) ) // o2fXhV
console . log ( hashids . encode ( [ '1' , '2' , '3' ] ) ) // o2fXhV
// BigInt support:
console . log ( hashids . encode ( [ 1n , 2n , 3n ] ) ) // o2fXhV
// Hex notation BigInt:
console . log ( hashids . encode ( [ 0x1n , 0x2n , 0x3n ] ) ) // o2fXhVMachen Sie Ihre IDs einzigartig:
Übergeben Sie ein "Salz", um Ihre IDs einzigartig zu machen (z. B. einen Projektnamen):
var hashids = new Hashids ( 'My Project' )
console . log ( hashids . encode ( 1 , 2 , 3 ) ) // Z4UrtW
var hashids = new Hashids ( 'My Other Project' )
console . log ( hashids . encode ( 1 , 2 , 3 ) ) // gPUasbVerwenden Sie die Polsterung, um Ihre IDs länger zu machen:
Beachten Sie, dass IDs nur so gepolstert sind, dass sie mindestens eine bestimmte Länge entsprechen. Es bedeutet nicht, dass Ihre IDs genau so lang sind.
const hashids = new Hashids ( ) // no padding
console . log ( hashids . encode ( 1 ) ) // jR
const hashids = new Hashids ( '' , 10 ) // pad to length 10
console . log ( hashids . encode ( 1 ) ) // VolejRejNmGeben Sie ein benutzerdefiniertes Alphabet vorbei:
const hashids = new Hashids ( '' , 0 , 'abcdefghijklmnopqrstuvwxyz' ) // all lowercase
console . log ( hashids . encode ( 1 , 2 , 3 ) ) // mdfphx Das Standard -Alphabet ist abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 .
Da v2.0 Sie sogar Emojis als Alphabet verwenden können.
Codieren Hex anstelle von Zahlen:
Nützlich, wenn Sie Zahlen wie Mongos ObjektIDs codieren möchten.
Beachten Sie, dass es keine Begrenzung gibt, wie groß eine Hex -Nummer Sie übergeben können.
var hashids = new Hashids ( )
var id = hashids . encodeHex ( '507f1f77bcf86cd799439011' ) // y42LW46J9luq3Xq9XMly
var hex = hashids . decodeHex ( id ) // 507f1f77bcf86cd799439011Bitte beachten Sie, dass dies nicht das Äquivalent zu:
const hashids = new Hashids ( )
const id = Hashids . encode ( BigInt ( '0x507f1f77bcf86cd799439011' ) ) // y8qpJL3ZgzJ8lWk4GEV
const hex = Hashids . decode ( id ) [ 0 ] . toString ( 16 ) // 507f1f77bcf86cd799439011 Der Unterschied zwischen den beiden besteht darin, dass der eingebaute encodeHex immer zu derselben Länge führt, selbst wenn er führende Nullen enthielt.
Zum Beispiel würde hashids.encodeHex('00000000') für qExOgK7 codieren und auf '00000000' zurückgehen (Längeinformationen bleiben erhalten).
Beim Dekodieren ist die Ausgabe immer ein Array von Zahlen (auch wenn Sie nur eine Zahl codieren):
const hashids = new Hashids ( )
const id = hashids . encode ( 1 )
console . log ( hashids . decode ( id ) ) // [1]Es wird nicht unterstützt, negative Zahlen zu kodieren.
Wenn Sie die falsche Eingabe an encode() übergeben, wird eine leere Zeichenfolge zurückgegeben:
const hashids = new Hashids ( )
const id = hashids . encode ( '123a' )
console . log ( id === '' ) // trueVerwenden Sie diese Bibliothek nicht als Sicherheitstool und codieren keine sensiblen Daten. Dies ist keine Verschlüsselungsbibliothek.
Der Hauptzweck von Hashiden besteht darin, IDs zu verschleiern. Es ist nicht gemeint oder getestet, um als Sicherheits- oder Komprimierungswerkzeug verwendet zu werden. Trotzdem versucht dieser Algorithmus, diese IDs zufällig und unvorhersehbar zu machen:
Keine Wiederholungsmuster, die zeigen, dass es 3 identische Zahlen in der ID enthält:
const hashids = new Hashids ( )
console . log ( hashids . encode ( 5 , 5 , 5 ) ) // A6t1tQGleiches gilt für inkrementierte Zahlen:
const hashids = new Hashids ( )
console . log ( hashids . encode ( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ) // wpfLh9iwsqt0uyCEFjHM
console . log ( hashids . encode ( 1 ) ) // jR
console . log ( hashids . encode ( 2 ) ) // k5
console . log ( hashids . encode ( 3 ) ) // l5
console . log ( hashids . encode ( 4 ) ) // mO
console . log ( hashids . encode ( 5 ) ) // nR Dieser Code wurde mit der Absicht geschrieben, erstellte IDs an sichtbaren Stellen wie der URL zu platzieren. Standardmäßig versucht der Algorithmus zu vermeiden, die häufigsten englischen Fluchwörter zu generieren, indem IDs generiert werden, die niemals die folgenden Buchstaben nebeneinander haben:
c, f, h, i, s, t, u
Sie können die Zeichen anpassen, die nicht nebeneinander platziert werden sollten, indem Sie dem Hashids -Konstruktor ein 4. Argument vorlegen:
// first 4 arguments will fallback to defaults (empty salt, no minimum length, default alphabet)
const hashids = new Hashids ( undefined , undefined , undefined , 'zyxZYX' ) Wenn Ihre Umgebung BigInt unterstützt, können Sie die Standard -API verwenden, um sie genauso zu codieren und zu entschlüsseln wie gewöhnliche Zahlen.
Der Versuch, ein BigInt -kodiertes Hashid in einer nicht unterstützten Umgebung zu entschlüsseln, wird einen Fehler machen.
MIT -Lizenz. Siehe die Lizenzdatei. Sie können Hashide in Open -Source -Projekten und kommerziellen Produkten verwenden. Brechen Sie nicht das Internet. Kthxbye.