Hashids adalah perpustakaan JavaScript kecil untuk menghasilkan ID seperti YouTube dari angka. Gunakan saat Anda tidak ingin mengekspos ID database Anda kepada pengguna: http://hashids.org/javascript
Instal Hashids melalui:
yarn add hashids (Atau hanya menggunakan kode secara langsung di dist/hashids.js )
import Hashids from 'hashids'
const hashids = new Hashids ( )
console . log ( hashids . encode ( 1 ) ) const Hashids = require ( 'hashids/cjs' )
const hashids = new Hashids ( )
console . log ( hashids . encode ( 1 ) ) Catatan: Saat menggunakan simpul yang mendukung ekspor bersyarat, require('hashids') (versi> = 13) juga akan berfungsi.
< script type =" text/javascript " src =" hashids.min.js " > </ script >
< script type =" text/javascript " >
var hashids = new Hashids ( ) ;
console . log ( hashids . encode ( 1 ) ) ;
</ script > import atau require , berdasarkan lingkungan (lihat di atas). Jika Anda ingin menggunakan sintaks modul CommonJS ( require ), Anda harus menginstal tipe Node.js dari repositori DefinitelyTyped .
npm install @types/node
Jika Anda ingin menggunakan sintaks ESM ( import Hashids from 'hashids' ), Anda perlu memasukkan opsi berikut di tsconfig.json Anda.
{
"allowSyntheticDefaultImports" : true ,
"esModuleInterop" : true
} Di atas tidak diperlukan jika Anda mengimpor versi CommonJS secara langsung: import Hashids from 'hashids/cjs' .
Jika Anda mendapatkan kesalahan yang menyatakan: Cannot find name 'BigInt' , tambahkan "esnext.bigint" atau "esnext" ke file tsconfig.json Anda, di bawah "lib" :
{
"compilerOptions" : {
...
"lib" : [
" esnext.bigint " ,
...
]
}
} Perhatikan bahwa lingkungan Anda tidak benar -benar harus mendukung BigInt untuk hashids berfungsi.
const hashids = new Hashids ( )
const id = hashids . encode ( 1 , 2 , 3 ) // o2fXhV
const numbers = hashids . decode ( id ) // [1, 2, 3] Beberapa cara lagi untuk lulus ke encode() :
const hashids = new Hashids ( )
console . log ( hashids . encode ( 1 , 2 , 3 ) ) // o2fXhV
console . log ( hashids . encode ( [ 1 , 2 , 3 ] ) ) // o2fXhV
// strings containing integers are coerced to numbers:
console . log ( hashids . encode ( '1' , '2' , '3' ) ) // o2fXhV
console . log ( hashids . encode ( [ '1' , '2' , '3' ] ) ) // o2fXhV
// BigInt support:
console . log ( hashids . encode ( [ 1n , 2n , 3n ] ) ) // o2fXhV
// Hex notation BigInt:
console . log ( hashids . encode ( [ 0x1n , 0x2n , 0x3n ] ) ) // o2fXhVJadikan ID Anda Unik:
Lulus "garam" untuk membuat ID Anda unik (misalnya nama proyek):
var hashids = new Hashids ( 'My Project' )
console . log ( hashids . encode ( 1 , 2 , 3 ) ) // Z4UrtW
var hashids = new Hashids ( 'My Other Project' )
console . log ( hashids . encode ( 1 , 2 , 3 ) ) // gPUasbGunakan padding untuk membuat ID Anda lebih lama:
Perhatikan bahwa ID hanya empuk agar pas setidaknya panjang tertentu. Itu tidak berarti bahwa ID Anda akan persis seperti itu.
const hashids = new Hashids ( ) // no padding
console . log ( hashids . encode ( 1 ) ) // jR
const hashids = new Hashids ( '' , 10 ) // pad to length 10
console . log ( hashids . encode ( 1 ) ) // VolejRejNmLulus Alfabet Kustom:
const hashids = new Hashids ( '' , 0 , 'abcdefghijklmnopqrstuvwxyz' ) // all lowercase
console . log ( hashids . encode ( 1 , 2 , 3 ) ) // mdfphx Alfabet default adalah abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 .
Karena v2.0 Anda bahkan dapat menggunakan emoji sebagai alfabet.
Encode hex bukan angka:
Berguna jika Anda ingin menyandikan nomor seperti Mongo's ObjectIds.
Perhatikan bahwa tidak ada batasan seberapa besar nomor hex yang dapat Anda lewati.
var hashids = new Hashids ( )
var id = hashids . encodeHex ( '507f1f77bcf86cd799439011' ) // y42LW46J9luq3Xq9XMly
var hex = hashids . decodeHex ( id ) // 507f1f77bcf86cd799439011Harap dicatat bahwa ini bukan setara dengan:
const hashids = new Hashids ( )
const id = Hashids . encode ( BigInt ( '0x507f1f77bcf86cd799439011' ) ) // y8qpJL3ZgzJ8lWk4GEV
const hex = Hashids . decode ( id ) [ 0 ] . toString ( 16 ) // 507f1f77bcf86cd799439011 Perbedaan antara keduanya adalah bahwa encodeHex built-in akan selalu menghasilkan panjang yang sama, bahkan jika itu mengandung nol terkemuka.
Misalnya hashids.encodeHex('00000000') akan menyandikan ke qExOgK7 dan mendekode kembali ke '00000000' (informasi panjang dipertahankan).
Saat decoding, output selalu merupakan array angka (bahkan jika Anda menyandikan hanya satu angka):
const hashids = new Hashids ( )
const id = hashids . encode ( 1 )
console . log ( hashids . decode ( id ) ) // [1]Pengkodean angka negatif tidak didukung.
Jika Anda meneruskan input palsu ke encode() , string kosong akan dikembalikan:
const hashids = new Hashids ( )
const id = hashids . encode ( '123a' )
console . log ( id === '' ) // trueJangan gunakan pustaka ini sebagai alat keamanan dan jangan menyandikan data yang sensitif. Ini bukan perpustakaan enkripsi.
Tujuan utama hashid adalah untuk mengaburkan ID. Ini tidak dimaksudkan atau diuji untuk digunakan sebagai alat keamanan atau kompresi. Karena itu, algoritma ini memang mencoba membuat ID ini acak dan tidak dapat diprediksi:
Tidak ada pola berulang yang menunjukkan ada 3 angka identik dalam ID:
const hashids = new Hashids ( )
console . log ( hashids . encode ( 5 , 5 , 5 ) ) // A6t1tQSama dengan angka bertambah:
const hashids = new Hashids ( )
console . log ( hashids . encode ( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ) // wpfLh9iwsqt0uyCEFjHM
console . log ( hashids . encode ( 1 ) ) // jR
console . log ( hashids . encode ( 2 ) ) // k5
console . log ( hashids . encode ( 3 ) ) // l5
console . log ( hashids . encode ( 4 ) ) // mO
console . log ( hashids . encode ( 5 ) ) // nR Kode ini ditulis dengan maksud menempatkan ID yang dibuat di tempat -tempat yang terlihat, seperti URL. Oleh karena itu, secara default algoritma mencoba untuk menghindari menghasilkan kata -kata kutukan bahasa Inggris yang paling umum dengan menghasilkan ID yang tidak pernah memiliki huruf -huruf berikut di sebelah satu sama lain:
c, f, h, i, s, t, u
Anda dapat menyesuaikan karakter yang tidak boleh ditempatkan di sebelah satu sama lain dengan memberikan argumen ke -4 kepada konstruktor hashids:
// first 4 arguments will fallback to defaults (empty salt, no minimum length, default alphabet)
const hashids = new Hashids ( undefined , undefined , undefined , 'zyxZYX' ) Jika lingkungan Anda mendukung BigInt , Anda dapat menggunakan API standar untuk menyandikan dan mendekodenya dengan cara yang sama seperti angka biasa.
Mencoba memecahkan kode hashid BigInt -encoded pada lingkungan yang tidak didukung akan melakukan kesalahan.
Lisensi MIT. Lihat file lisensi. Anda dapat menggunakan hashid dalam proyek open source dan produk komersial. Jangan merusak internet. Kthxbye.