Hashids — небольшая PHP-библиотека для генерации идентификаторов YouTube из чисел. Используйте его, если вы не хотите предоставлять пользователям числовые идентификаторы базы данных: https://hashids.org/php.
Требуется, чтобы этот пакет вместе с Composer находился в корневом каталоге вашего проекта.
composer require hashids/hashids
Затем вы можете импортировать класс в свое приложение:
use Hashids Hashids ;
$ hashids = new Hashids ();
$ hashids -> encode ( 1 );
Примечание. Для работы хэшидов требуется расширение
bcmath
илиgmp
.
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
Передайте имя проекта, чтобы сделать ваши выходные идентификаторы уникальными:
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
Обратите внимание, что выходные идентификаторы дополняются только до определенной длины. Это не значит, что они будут именно такой длины.
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
Полезно, если вы хотите закодировать ObjectIds Mongo. Обратите внимание, что нет ограничений на размер шестнадцатеричного числа, которое вы можете передать (это не обязательно должен быть ObjectId Mongo).
use Hashids Hashids ;
$ hashids = new Hashids ();
$ id = $ hashids -> encodeHex ( ' 507f1f77bcf86cd799439011 ' ); // y42LW46J9luq3Xq9XMly
$ hex = $ hashids -> decodeHex ( $ id ); // 507f1f77bcf86cd799439011
При декодировании вывод всегда представляет собой массив чисел (даже если вы закодировали только одно число):
use Hashids Hashids ;
$ hashids = new Hashids ();
$ id = $ hashids -> encode ( 1 );
$ hashids -> decode ( $ id ); // [1]
Кодирование отрицательных чисел не поддерживается.
Если вы передадите фиктивный ввод в encode()
, будет возвращена пустая строка:
use Hashids Hashids ;
$ hashids = new Hashids ();
$ id = $ hashids -> encode ( ' 123a ' );
$ id === '' ; // true
Не используйте эту библиотеку в качестве меры безопасности. Не кодируйте с его помощью конфиденциальные данные. Хашиды не являются библиотекой шифрования.
Основная цель хашидов — запутать числовые идентификаторы. Он не предназначен и не тестировался для использования в качестве инструмента безопасности или сжатия. Однако этот алгоритм пытается сделать эти идентификаторы случайными и непредсказуемыми:
При кодировании нескольких одинаковых чисел шаблон не отображается (3 показано в следующем примере):
use Hashids Hashids ;
$ hashids = new Hashids ();
$ hashids -> encode ( 5 , 5 , 5 ); // A6t1tQ
То же самое справедливо и при кодировании серии чисел, а не при кодировании их по отдельности:
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
Этот код был написан с намерением разместить выходные идентификаторы в видимых местах, например в URL-адресе. Поэтому алгоритм пытается избежать создания наиболее распространенных английских ругательств, генерируя идентификаторы, в которых никогда не встречаются следующие буквы рядом друг с другом:
c, f, h, i, s, t, u