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/hashidsEntão você pode importar a classe para sua aplicação:
use Hashids Hashids ;
$ hashids = new Hashids ();
$ hashids -> encode ( 1 );Nota Hashids requerem extensão
bcmathougmppara 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 === '' ; // trueNã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 ); // A6t1tQO 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