Hashids는 숫자에서 YouTube와 유사한 ID를 생성하는 작은 PHP 라이브러리입니다. 데이터베이스 숫자 ID를 사용자에게 노출하고 싶지 않을 때 사용하세요: https://hashid.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
출력 ID를 고유하게 만들려면 프로젝트 이름을 전달하세요.
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
출력 ID는 최소한 특정 길이에 맞게 채워집니다. 그렇다고 해서 정확히 그 길이가 될 것이라는 의미는 아닙니다.
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
Mongo의 ObjectId를 인코딩하려는 경우 유용합니다. 전달할 수 있는 16진수 크기에는 제한이 없습니다 (Mongo의 ObjectId일 필요는 없음).
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
이 라이브러리를 보안 조치로 사용하지 마십시오. 민감한 데이터를 인코딩 하지 마십시오 . Hashids는 암호화 라이브러리가 아닙니다 .
Hashids의 주요 목적은 숫자 ID를 난독화하는 것입니다. 보안이나 압축 도구로 사용하도록 의도되거나 테스트되지 않았습니다 . 그렇긴 하지만, 이 알고리즘은 이러한 ID를 무작위로 예측할 수 없게 만들려고 시도합니다.
여러 개의 동일한 숫자를 인코딩할 때 표시되는 패턴이 없습니다(다음 예에서는 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과 같이 눈에 보이는 위치에 출력 ID를 배치하려는 의도로 작성되었습니다. 따라서 알고리즘은 다음 문자가 나란히 붙지 않는 ID를 생성하여 가장 일반적인 영어 저주 단어 생성을 방지하려고 합니다.
c, f, h, i, s, t, u