Hashids Javascript Tutorial: Cara Encode & Decode ID

Hashids adalah pustaka kecil berbobot ringan untuk menghasilkan string pendek, unik, dan tidak mudah ditebak (obfuscated) dari angka integer, mirip dengan cara YouTube atau Bitly menyembunyikan ID numerik asli mereka. Pustaka ini bukan alat enkripsi dua arah yang aman secara kriptografi, melainkan metode untuk mencegah pengguna menebak ID database berikutnya melalui URL (misalnya mengubah /user/1 menjadi /user/gY).

Instalasi Hashids di Node.js dan Browser

Untuk mulai menggunakan Hashids pada lingkungan JavaScript, pasang paket resmi melalui manajer paket npm ke dalam direktori proyek Anda menggunakan terminal.

npm install hashids

Setelah instalasi selesai, impor modul tersebut ke dalam file JavaScript Anda. Hashids mendukung CommonJS maupun ES Modules.

import Hashids from 'hashids';

// Inisialisasi dengan salt unik dan panjang minimal karakter
const hashids = new Hashids('ini salt rahasia perusahaan saya', 8);

Metode Utama dalam Hashids JavaScript

Pustaka Hashids menyediakan dua fungsi esensial: encode untuk mengubah angka menjadi string hash, dan decode untuk mengembalikan string hash ke bentuk angka aslinya.

Metode Parameter Masukan Nilai Keluaran Contoh Penggunaan
encode() Angka tunggal atau Array angka (Integer) String unik (Hash) hashids.encode(123) → "yrg8gW3v"
decode() String hash Array berisi angka asli hashids.decode("yrg8gW3v") → [123]
encodeHex() String heksadesimal (misal: ID MongoDB ObjectId) String unik hashids.encodeHex("507f1f77bcf86cd799439011")
decodeHex() String hash dari hex String heksadesimal asli hashids.decodeHex("y87W3v")

Contoh Implementasi Kode Lengkap

Berikut adalah implementasi nyata dalam skrip JavaScript untuk melakukan enkripsi dan dekripsi ID pengguna secara bolak-balik.

import Hashids from 'hashids';

// 1. Buat instance dengan salt dan panjang minimum hash 6 karakter
const hashids = new Hashids('my-project-secret-salt', 6);

// 2. Proses Encode (Angka Database ke Hash URL)
const userId = 48912;
const encodedId = hashids.encode(userId);
console.log('Encoded Hash:', encodedId); // Output contoh: "3k9ZJb"

// 3. Proses Decode (Hash URL kembali ke Angka Database)
const decodedArray = hashids.decode(encodedId);
const originalId = decodedArray[0];
console.log('Decoded ID:', originalId); // Output: 48912

// 4. Encode Multiple IDs (Contoh: ID pengguna dan ID transaksi sekaligus)
const multiHash = hashids.encode(48912, 99);
console.log('Multi Encoded:', multiHash);

const multiDecode = hashids.decode(multiHash);
console.log('Multi Decoded:', multiDecode); // Output: [ 48912, 99 ]

Konfigurasi Kustomisasi Karakter

Secara default, Hashids menggunakan alfabet alfanumerik besar dan kecil (a-z, A-Z, 0-9). Anda dapat mengubah set karakter alfabet ini agar hasil hash lebih pendek, menghindari huruf yang mirip (seperti huruf 'o' dan angka '0'), atau menyesuaikan dengan kebutuhan branding URL Anda.

// Menggunakan alfabet kustom tanpa huruf vokal untuk menghindari kata kasar
const customHashids = new Hashids('salt-anda', 8, 'bcdfghjklmnpqrstvwxyz23456789');

const result = customHashids.encode(1001);
console.log(result); // Menghasilkan hash bebas vokal

Troubleshooting Lapangan

Beberapa kendala umum yang sering ditemui pengembang saat mengimplementasikan Hashids di JavaScript:

  • Hasil Decode Kosong []: Terjadi karena string hash yang dimasukkan salah, atau salt yang digunakan saat decode berbeda dengan salt saat encode. Pastikan instance Hashids menggunakan parameter yang konsisten.
  • Keamanan Data Sensitif: Jangan pernah menggunakan Hashids untuk mengenkripsi kata sandi (password), token JWT, atau data finansial penting. Hashids murni teknik obfuscation (pengaburan), bukan fungsi hash kriptografi seperti bcrypt atau SHA-256.
  • Keterbatasan Angka Negatif: Hashids hanya dapat memproses angka bulat positif (integer >= 0). Memasukkan angka negatif akan menghasilkan array kosong atau error pada versi tertentu.