Hashids é uma pequena biblioteca PHP para gerar ids semelhantes aos do YouTube a partir de números. Use-o quando não quiser expor os IDs numéricos do seu banco de dados aos usuários: https://hashids.org/php
Exija este pacote, com o Composer, no diretório raiz do seu projeto.
composer require hashids/hashids
Então você pode importar a classe para sua aplicação:
use Hashids Hashids ;
$ hashids = new Hashids ();
$ hashids -> encode ( 1 );
Nota Hashids requerem extensão
bcmath
ougmp
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
Passe um nome de projeto para tornar seus IDs de saída exclusivos:
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
Observe que os IDs de saída são preenchidos apenas para caber em pelo menos um determinado comprimento. Isso não significa que eles terão exatamente esse comprimento.
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 se você deseja codificar ObjectIds do Mongo. Observe que não há limite para o tamanho do número hexadecimal que você pode passar (não precisa ser o ObjectId do Mongo).
use Hashids Hashids ;
$ hashids = new Hashids ();
$ id = $ hashids -> encodeHex ( ' 507f1f77bcf86cd799439011 ' ); // y42LW46J9luq3Xq9XMly
$ hex = $ hashids -> decodeHex ( $ id ); // 507f1f77bcf86cd799439011
Ao decodificar, a saída é sempre uma matriz de números (mesmo se você codificou apenas um número):
use Hashids Hashids ;
$ hashids = new Hashids ();
$ id = $ hashids -> encode ( 1 );
$ hashids -> decode ( $ id ); // [1]
A codificação de números negativos não é suportada.
Se você passar uma entrada falsa para encode()
, uma string vazia será retornada:
use Hashids Hashids ;
$ hashids = new Hashids ();
$ id = $ hashids -> encode ( ' 123a ' );
$ id === '' ; // true
Não use esta biblioteca como medida de segurança. Não codifique dados confidenciais com ele. Hashids não é uma biblioteca de criptografia.
O objetivo principal dos Hashids é ofuscar IDs numéricos. Não foi concebido ou testado para ser usado como ferramenta de segurança ou compactação. Dito isto, este algoritmo tenta tornar esses ids aleatórios e imprevisíveis:
Não há nenhum padrão mostrado ao codificar vários números idênticos (3 mostrado no exemplo a seguir):
use Hashids Hashids ;
$ hashids = new Hashids ();
$ hashids -> encode ( 5 , 5 , 5 ); // A6t1tQ
O mesmo acontece ao codificar uma série de números versus codificá-los separadamente:
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 foi escrito com o intuito de colocar os ids de saída em locais visíveis, como a URL. Portanto, o algoritmo tenta evitar a geração de palavrões mais comuns em inglês, gerando ids que nunca possuem as seguintes letras próximas umas das outras:
c, f, h, i, s, t, u