Cara Mengubah ID Angka Menjadi String Acak (Hashids & UUID)

Mengubah ID angka berurutan (auto-increment) dari basis data menjadi string acak sangat penting untuk mencegah pengguna menebak jumlah transaksi, mengakses data pengguna lain melalui URL, atau mengekspos skala bisnis secara publik. Pendekatan ini biasanya menggunakan pustaka pemetaan seperti Hashids, pengidentifikasi unik universal (UUIDv4), atau enkripsi berbasis simetris (AES/Cipher).

Pemilihan metode bergantung pada kebutuhan arsitektur sistem Anda: apakah memerlukan string pendek yang dapat dikembalikan lagi menjadi angka aslinya (reversible), atau string acak panjang yang berdiri sendiri sebagai kunci primer (non-reversible).

Metode 1: Menggunakan Hashids (Reversible & Pendek)

Hashids adalah pustaka open-source ringan yang dirancang khusus untuk menghasilkan string pendek, unik, dan acak dari satu atau beberapa angka bulat positif. Hasilnya dapat didekode kembali ke bentuk ID angka aslinya tanpa perlu menyimpan pemetaan di basis data.

Contoh Implementasi PHP (hashids/hashids)

require 'vendor/autoload.php';

use Hashids\Hashids;

// Inisialisasi dengan salt unik dan panjang minimal 6 karakter
$hashids = new Hashids('kunci-rahasia-garam-anda', 6);

// Enkode ID angka menjadi string acak
$encoded = $hashids->encode(12345);
// Hasil: "gY892Z"

// Dekode string acak kembali menjadi ID angka
$decoded = $hashids->decode($encoded);
// Hasil: [12345]
$idAsli = $decoded[0];

Metode 2: Menggunakan UUID v4 (Unik Global & Acak Penuh)

UUID (Universally Unique Identifier) versi 4 menghasilkan string heksadesimal sepanjang 36 karakter berdasarkan nomor acak (random). Metode ini sangat cocok untuk sistem terdistribusi skala besar karena probabilitas terjadinya duplikasi sangat kecil (hampir mustahil).

Contoh Implementasi JavaScript (Node.js / Browser)

// Menggunakan pustaka 'uuid'
import { v4 as uuidv4 } from 'uuid';

const randomStringId = uuidv4();
console.log(randomStringId); 
// Contoh Output: 'f47ac10b-58cc-4372-a567-0e02b2c3d479'

Perbandingan Metode Pengubahan ID

Metode Panjang Hasil Dapat Dibalik (Reversible) Butuh Simpan di DB? Kasus Penggunaan Terbaik
Hashids Pendek (6-12 karakter) Ya Tidak URL publik (YouTube, slug transaksi)
UUIDv4 Panjang (36 karakter) Tidak Ya (sebagai PK) Sistem mikroservis, API modern, database terdistribusi
AES Encryption Menengah-Panjang Ya Tidak Keamanan ketat membutuhkan cipher rahasia

Praktik Terbaik Keamanan (Best Practices)

  • Jangan gunakan Base64 mentah: Base64 seperti MTIzNDU= sangat mudah didekode oleh siapa saja dan tidak memberikan keamanan atau keacakan yang sesungguhnya.
  • Gunakan Salt yang Kuat: Jika menggunakan Hashids atau fungsi hash, pastikan menggunakan string garam (salt) yang panjang dan rahasia agar tidak mudah ditebak dengan metode brute-force.
  • Indeks Database: Jika Anda mengubah kolom ID utama menjadi UUID, pastikan tipe data di basis data disetel dengan benar (misalnya CHAR(36) atau BINARY(16) untuk performa optimal).