Hashids est une petite bibliothèque PHP permettant de générer des identifiants de type YouTube à partir de nombres. Utilisez-le lorsque vous ne souhaitez pas exposer les identifiants numériques de votre base de données aux utilisateurs : https://hashids.org/php
Exigez ce package, avec Composer, dans le répertoire racine de votre projet.
composer require hashids/hashids
Ensuite, vous pouvez importer la classe dans votre application :
use Hashids Hashids ;
$ hashids = new Hashids ();
$ hashids -> encode ( 1 );
Remarque Les hashids nécessitent l'extension
bcmath
ougmp
pour fonctionner.
use Hashids Hashids ;
$ hashids = new Hashids ();
$ id = $ hashids -> encode ( 1 , 2 , 3 ); // o2fXhV
$ numbers = $ hashids -> decode ( $ id ); // [1, 2, 3]
encode()
: use Hashids Hashids ;
$ hashids = new Hashids ();
$ hashids -> encode ( 1 , 2 , 3 ); // o2fXhV
$ hashids -> encode ([ 1 , 2 , 3 ]); // o2fXhV
$ hashids -> encode ( ' 1 ' , ' 2 ' , ' 3 ' ); // o2fXhV
$ hashids -> encode ([ ' 1 ' , ' 2 ' , ' 3 ' ]); // o2fXhV
Transmettez un nom de projet pour rendre vos identifiants de sortie uniques :
use Hashids Hashids ;
$ hashids = new Hashids ( ' My Project ' );
$ hashids -> encode ( 1 , 2 , 3 ); // Z4UrtW
$ hashids = new Hashids ( ' My Other Project ' );
$ hashids -> encode ( 1 , 2 , 3 ); // gPUasb
Notez que les identifiants de sortie sont uniquement complétés pour s'adapter à au moins une certaine longueur. Cela ne veut pas dire qu’ils auront exactement cette longueur.
use Hashids Hashids ;
$ hashids = new Hashids (); // no padding
$ hashids -> encode ( 1 ); // jR
$ hashids = new Hashids ( '' , 10 ); // pad to length 10
$ hashids -> encode ( 1 ); // VolejRejNm
use Hashids Hashids ;
$ hashids = new Hashids ( '' , 0 , ' abcdefghijklmnopqrstuvwxyz ' ); // all lowercase
$ hashids -> encode ( 1 , 2 , 3 ); // mdfphx
Utile si vous souhaitez encoder les ObjectIds de Mongo. Notez qu'il n'y a aucune limite sur la taille d'un nombre hexadécimal que vous pouvez transmettre (il n'est pas nécessaire qu'il s'agisse de l'ObjectId de Mongo).
use Hashids Hashids ;
$ hashids = new Hashids ();
$ id = $ hashids -> encodeHex ( ' 507f1f77bcf86cd799439011 ' ); // y42LW46J9luq3Xq9XMly
$ hex = $ hashids -> decodeHex ( $ id ); // 507f1f77bcf86cd799439011
Lors du décodage, la sortie est toujours un tableau de nombres (même si vous n'avez codé qu'un seul nombre) :
use Hashids Hashids ;
$ hashids = new Hashids ();
$ id = $ hashids -> encode ( 1 );
$ hashids -> decode ( $ id ); // [1]
L'encodage des nombres négatifs n'est pas pris en charge.
Si vous transmettez une fausse entrée à encode()
, une chaîne vide sera renvoyée :
use Hashids Hashids ;
$ hashids = new Hashids ();
$ id = $ hashids -> encode ( ' 123a ' );
$ id === '' ; // true
N'utilisez pas cette bibliothèque par mesure de sécurité. N’encodez pas de données sensibles avec. Hashids n'est pas une bibliothèque de chiffrement.
L’objectif principal des hashids est de masquer les identifiants numériques. Il n'est pas destiné ni testé pour être utilisé comme outil de sécurité ou de compression. Cela dit, cet algorithme essaie de rendre ces identifiants aléatoires et imprévisibles :
Aucun modèle n'est affiché lors de l'encodage de plusieurs nombres identiques (3 illustrés dans l'exemple suivant) :
use Hashids Hashids ;
$ hashids = new Hashids ();
$ hashids -> encode ( 5 , 5 , 5 ); // A6t1tQ
La même chose est vraie lors de l’encodage d’une série de nombres plutôt que de les encoder séparément :
use Hashids Hashids ;
$ hashids = new Hashids ();
$ hashids -> encode ( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ); // wpfLh9iwsqt0uyCEFjHM
$ hashids -> encode ( 1 ); // jR
$ hashids -> encode ( 2 ); // k5
$ hashids -> encode ( 3 ); // l5
$ hashids -> encode ( 4 ); // mO
$ hashids -> encode ( 5 ); // nR
Ce code a été écrit dans le but de placer les identifiants de sortie à des endroits visibles, comme l'URL. Par conséquent, l'algorithme essaie d'éviter de générer les jurons anglais les plus courants en générant des identifiants qui n'ont jamais les lettres suivantes les unes à côté des autres :
c, f, h, i, s, t, u