Hashids est une petite bibliothèque JavaScript pour générer des ID de type YouTube à partir de nombres. Utilisez-le lorsque vous ne souhaitez pas exposer vos ID de base de données à l'utilisateur: http://hashids.org/javascript
Installez les hachides via:
yarn add hashids (ou simplement utiliser directement le code sur 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 ) ) Remarque: Lors de l'utilisation du nœud qui prend en charge les exportations conditionnelles, require('hashids') (version> = 13) fonctionnera également.
< script type =" text/javascript " src =" hashids.min.js " > </ script >
< script type =" text/javascript " >
var hashids = new Hashids ( ) ;
console . log ( hashids . encode ( 1 ) ) ;
</ script > import ou require , en fonction de l'environnement (voir ci-dessus). Si vous souhaitez utiliser la syntaxe du module CommonJS ( require ), vous devrez installer les types Node.js à partir du référentiel DefinitelyTyped .
npm install @types/node
Si vous souhaitez utiliser la syntaxe ESM ( import Hashids from 'hashids' ), vous devrez inclure les options suivantes dans votre tsconfig.json .
{
"allowSyntheticDefaultImports" : true ,
"esModuleInterop" : true
} Ce qui précède n'est pas requis si vous importez directement la version CommonJS: import Hashids from 'hashids/cjs' .
Si vous obtenez des erreurs indiquant: Cannot find name 'BigInt' , ajoutez "esnext.bigint" ou "esnext" dans votre fichier tsconfig.json , sous "lib" :
{
"compilerOptions" : {
...
"lib" : [
" esnext.bigint " ,
...
]
}
} Notez que votre environnement n'a pas à soutenir BigInt pour que les hashids fonctionnent.
const hashids = new Hashids ( )
const id = hashids . encode ( 1 , 2 , 3 ) // o2fXhV
const numbers = hashids . decode ( id ) // [1, 2, 3] Quelques façons de passer pour encode() :
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 ] ) ) // o2fXhVRendez vos identifiants uniques:
Passez un "sel" pour rendre vos identifiants uniques (par exemple un nom de projet):
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 ) ) // gPUasbUtilisez le rembourrage pour s'allonger vos identifiants:
Notez que les ID sont uniquement rembourrés pour s'adapter au moins une certaine longueur. Cela ne signifie pas que vos identifiants seront exactement cette longueur.
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 ) ) // VolejRejNmPassez un alphabet personnalisé:
const hashids = new Hashids ( '' , 0 , 'abcdefghijklmnopqrstuvwxyz' ) // all lowercase
console . log ( hashids . encode ( 1 , 2 , 3 ) ) // mdfphx L'alphabet par défaut est abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 .
Depuis V2.0, vous pouvez même utiliser des emojis comme alphabet.
Encoder Hex au lieu des nombres:
Utile si vous souhaitez coder des numéros comme les objets de Mongo.
Notez qu'il n'y a pas de limite à la taille d'un nombre hexadécimal que vous pouvez passer.
var hashids = new Hashids ( )
var id = hashids . encodeHex ( '507f1f77bcf86cd799439011' ) // y42LW46J9luq3Xq9XMly
var hex = hashids . decodeHex ( id ) // 507f1f77bcf86cd799439011Veuillez noter que ce n'est pas l'équivalent de:
const hashids = new Hashids ( )
const id = Hashids . encode ( BigInt ( '0x507f1f77bcf86cd799439011' ) ) // y8qpJL3ZgzJ8lWk4GEV
const hex = Hashids . decode ( id ) [ 0 ] . toString ( 16 ) // 507f1f77bcf86cd799439011 La différence entre les deux est que l' encodeHex intégré entraînera toujours la même longueur, même s'il contenait des zéros de premier plan.
Par exemple, hashids.encodeHex('00000000') encoderait à qExOgK7 et décoderait à '00000000' (les informations de longueur sont conservées).
Lors du décodage, la sortie est toujours un tableau de nombres (même si vous codez un seul numéro):
const hashids = new Hashids ( )
const id = hashids . encode ( 1 )
console . log ( hashids . decode ( id ) ) // [1]Le codage des nombres négatifs n'est pas pris en charge.
Si vous passez une entrée fausse à encode() , une chaîne vide sera renvoyée:
const hashids = new Hashids ( )
const id = hashids . encode ( '123a' )
console . log ( id === '' ) // trueN'utilisez pas cette bibliothèque comme outil de sécurité et ne codez pas de données sensibles. Ce n'est pas une bibliothèque de chiffrement.
L'objectif principal des hashids est d'obscurcir les ID. Il n'est pas signifié ou testé pour être utilisé comme outil de sécurité ou de compression. Cela dit, cet algorithme essaie de rendre ces ID aléatoires et imprévisibles:
Aucun modèle de répétition montrant qu'il y a 3 nombres identiques dans l'ID:
const hashids = new Hashids ( )
console . log ( hashids . encode ( 5 , 5 , 5 ) ) // A6t1tQIdem avec des nombres incrémentés:
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 Ce code a été écrit avec l'intention de placer des ID créés dans des endroits visibles, comme l'URL. Par conséquent, par défaut, l'algorithme essaie d'éviter de générer les mots de malédiction anglais les plus courants en générant des ID qui n'ont jamais les lettres suivantes les unes à côté des autres:
c, f, h, i, s, t, u
Vous pouvez personnaliser les caractères qui ne devraient pas être placés les uns à côté des autres en fournissant un 4ème argument au constructeur Hashids:
// first 4 arguments will fallback to defaults (empty salt, no minimum length, default alphabet)
const hashids = new Hashids ( undefined , undefined , undefined , 'zyxZYX' ) Si votre environnement prend en charge BigInt , vous pouvez utiliser l'API standard pour encoder et les décoder de la même manière que les nombres ordinaires.
Essayer de décoder un hachage encodé de BigInt sur un environnement non pris en charge lancera une erreur.
Licence MIT. Voir le fichier de licence. Vous pouvez utiliser des hashids dans des projets open source et des produits commerciaux. Ne cassez pas Internet. Kthxbye.