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)atauBINARY(16)untuk performa optimal).