Hashids es una pequeña biblioteca PHP para generar identificaciones similares a las de YouTube a partir de números. Úselo cuando no desee exponer los identificadores numéricos de su base de datos a los usuarios: https://hashids.org/php
Solicite este paquete, con Composer, en el directorio raíz de su proyecto.
composer require hashids/hashids
Luego puedes importar la clase a tu aplicación:
use Hashids Hashids ;
$ hashids = new Hashids ();
$ hashids -> encode ( 1 );
Nota Los Hashids requieren la extensión
bcmath
ogmp
para funcionar.
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
Pase un nombre de proyecto para que sus identificadores de salida sean únicos:
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
Tenga en cuenta que los identificadores de salida solo se rellenan para que se ajusten al menos a una longitud determinada. No significa que tendrán exactamente esa longitud.
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
Útil si desea codificar los ObjectIds de Mongo. Tenga en cuenta que no hay límite en el tamaño del número hexadecimal que puede pasar (no tiene que ser el ObjectId de Mongo).
use Hashids Hashids ;
$ hashids = new Hashids ();
$ id = $ hashids -> encodeHex ( ' 507f1f77bcf86cd799439011 ' ); // y42LW46J9luq3Xq9XMly
$ hex = $ hashids -> decodeHex ( $ id ); // 507f1f77bcf86cd799439011
Al decodificar, la salida es siempre una matriz de números (incluso si codificó solo un número):
use Hashids Hashids ;
$ hashids = new Hashids ();
$ id = $ hashids -> encode ( 1 );
$ hashids -> decode ( $ id ); // [1]
No se admite la codificación de números negativos.
Si pasa una entrada falsa a encode()
, se devolverá una cadena vacía:
use Hashids Hashids ;
$ hashids = new Hashids ();
$ id = $ hashids -> encode ( ' 123a ' );
$ id === '' ; // true
No utilice esta biblioteca como medida de seguridad. No codifique datos confidenciales con él. Hashids no es una biblioteca de cifrado.
El objetivo principal de los Hashids es ofuscar los identificadores numéricos. No está diseñado ni probado para usarse como herramienta de seguridad o compresión. Dicho esto, este algoritmo intenta hacer que estos identificadores sean aleatorios e impredecibles:
No se muestra ningún patrón al codificar varios números idénticos (se muestran 3 en el siguiente ejemplo):
use Hashids Hashids ;
$ hashids = new Hashids ();
$ hashids -> encode ( 5 , 5 , 5 ); // A6t1tQ
Lo mismo ocurre cuando se codifica una serie de números en lugar de codificarlos por separado:
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
Este código se escribió con la intención de colocar los identificadores de salida en lugares visibles, como la URL. Por lo tanto, el algoritmo intenta evitar generar las malas palabras en inglés más comunes generando identificadores que nunca tienen las siguientes letras una al lado de la otra:
c, f, h, i, s, t, u