Ide Membuat Generator Kode Unik Incremental Otomatis
April 10th, 2009 | by rosihanari |
Cetak Artikel Ini
Artikel kali ini akan saya coba bahas mengenai bagaimana ide membuat generator kode unik incremental secara otomatis.
Wah apa tuh maksudnya? OK saya gambarkan hal tersebut melalui contoh berikut ini. Misalkan terdapat suatu sistem yang digunakan untuk pendaftaran anggota. Setiap anggota yang mendaftar nantinya akan diberikan kode unik, misalnya berbentuk A00001. Dalam keanggotaan tersebut terdapat 3 jenis anggota, yaitu Platinum, Gold dan Silver. Wah… kok kayak keanggotaan apa gitu ya? It’s OK, itu hanya contoh. Untuk Platinum, kode anggotanya berawalan A dan dilanjutkan dengan nomor urutnya. Keanggotaan Gold kodenya berawalan B dan Silver C. Sehingga misalkan terdapat seseorang pendaftar pertama, dan kebetulan ia ikut yang Platinum, maka harusnya kode dia adalah A00001. Selanjutnya bila terdapat pendaftar kedua dan ia juga ikut Platinum, maka kode berikutnya adalah A00002. Bagaimana bila terdapat pendaftar yang ketiga namun ia ingin ikut yang Gold? Ya.. karena sebelumnya belum ada anggota yang Gold, maka pendaftar ketiga ini mendapat kode B00001. Begitu seterusnya…
Nah.. paham kan gambaran di atas? Selanjutnya pertanyaannya adalah bagaimana membuat kode unik incremental seperti di atas secara otomatis setiap kali ada pendaftar yang baru? Hal inilah yang akan dibahas pada artikel kali ini.
Memang sih… untuk kode unik ini kita bisa menggunakan fasilitas auto increment dalam database, namun auto increment yang hanya berupa bilangan bulat positif 1, 2, 3, .. dst ini menjadi tidak bermakna.
Contoh kasus lain yang menggunakan konsep kode unik incremental ini adalah kode transaksi yang ada di supermarket. Setiap kali kita membayar di kasir, pasti kita mendapatkan struk yang terdapat kode transaksi. Kode transaksi ini unik. Contoh kode transaksi ini misalkan TR2801200900001, dimana TR menunjukkan transaksi pembelian, 28012009 menunjukkan tanggal transaksi yaitu pada tanggal 28/1/2009 dan 00001 menunjukkan transaksi pembelian pertama pada tanggal tersebut. Bila nanti terdapat transaksi kedua pada tanggal yang sama, maka kodenya menjadi TR2801200900002, dst.
Adapun contoh yang lain yang menggunakan konsep di atas adalah ketika membuat KTP, dimana setiap orang akan diberikan nomor KTP unik. Selain itu juga dalam kasus membuat nomor SIM.
OK.. akan saya paparkan bagaimana ide membuat kode unik incremental tersebut. Dalam hal ini akan saya ambil kasus mengenai pendaftaran anggota seperti halnya contoh pertama di atas.
Nah.. bagaimana ide untuk membuat kode unik tersebut? Misalkan terdapat anggota baru yang mendaftar dengan jenis keanggotaan Platinum. Maka proses pertamanya adalah mencari kode anggota terbesar yang berawalan A**** dalam database. Dalam hal ini kita bisa menggunakan query SQL
SELECT max(field_kode) FROM table WHERE field_kode LIKE 'A%'
Sebagai contoh misalkan terdapat kode anggota A00001, A00002, dan A00003, maka hasil query di atas adalah A00003.
Trus… setelah mendapatkan kode terbesarnya, selanjutnya adalah mengambil angka dalam kode. Angka dalam kode ini nanti akan ditambah satu. Misalkan kode terbesarnya adalah A00003, maka kita ambil substring bilangan 3 untuk nantinya ditambah satu menjadi 4. Untuk mengambil angka dalam kode ini kita bisa gunakan perintah substr() dalam PHP.
Setelah mengambil angka dalam kode dan ditambah satu, lalu hasilnya digabung kembali menjadi string kode. Untuk membentuk atau memformat string kode ini, kita bisa menggunakan sprintf() dalam PHP.
OK… sekarang kita coba membuat scriptnya. Kita pertama siapkan tabel untuk menyimpan data member
CREATE TABLE member ( id varchar(6), nama varchar(20), alamat text, PRIMARY KEY(id) );
Selanjutnya kita buat form untuk pendaftaran member baru.
member.htm
<h1>New Member</h1> <form method="post" action="add.php"> Jenis Member <select name="jenis"> <option value="A">Platinum</option> <option value="B">Gold</option> <option value="C">Silver</option> </select> <input type="submit" name="submit" value="Submit" /> </form>
Form di atas digunakan untuk memilih jenis keanggotaan untuk anggota baru yang akan ditambahkan. Setelah memilih jenis keanggotaan selanjutnya akan menuju form untuk memasukkan data anggota. Nah.. untuk form kedua ini, kode anggota tidak perlu diisi secara manual namun secara otomatis telah muncul. Data yang diisi hanyalah nama dan alamat anggota saja.
add.php
<?php
// koneksi ke mysql
mysql_connect("dbhost", "dbuser", "dbpass");
mysql_select_db("dbname");
// membaca jenis anggota yang dipilih dari form sebelumnya
$jenis = $_POST['jenis'];
// membaca kode anggota terbesar berdasarkan jenis keanggotaan
$query = "SELECT max(id) as maxID FROM member WHERE id LIKE '$jenis%'";
$hasil = mysql_query($query);
$data = mysql_fetch_array($hasil);
$idMax = $data['maxID'];
// mengambil angka atau bilangan dalam kode anggota terbesar,
// dengan cara mengambil substring mulai dari karakter ke-1 diambil 5 karakter
// misal 'A00001', akan diambil '00001'
// setelah substring bilangan diambil lantas dicasting menjadi integer
$noUrut = (int) substr($idMax, 1, 5);
// bilangan yang diambil ini ditambah 1 untuk menentukan nomor urut berikutnya
$noUrut++;
// membentuk kode anggota baru
// perintah sprintf("%05s", $noUrut); digunakan untuk memformat string sebanyak 5 karakter
// misal sprintf("%05s", 12); maka akan dihasilkan '00012'
// atau misal sprintf("%05s", 1); maka akan dihasilkan string '00001'
$newID = $jenis . sprintf("%05s", $noUrut);
// kode anggota yang baru di atas nanti akan ditampilkan dalam komponen text box
?>
<h1>Tambah Member Baru</h1>
<form method="post" action="submit.php">
<table border="0">
<tr><td>ID Member</td><td>:</td><td><input type="text" name="id" value="<?php echo $newID; ?>"></td></tr>
<tr><td>Nama Member</td><td>:</td><td><input type="text" name="nama"></td></tr>
<tr><td>Alamat Member</td><td>:</td><td><input type="text" name="alamat"></td></tr>
<tr><td></td><td></td><td><input type="submit" name="submit" value="Submit"></td></tr>
</table>
</form>
Terakhir… kita buat script untuk menyimpan data anggota ini
submit.php
<?php
mysql_connect("dbhost", "dbuser", "dbpass");
mysql_select_db("dbname");
$idMember = $_POST['id'];
$namaMember = $_POST['nama'];
$alamatMember = $_POST['alamat'];
$query = "INSERT INTO member VALUES ('$idMember', '$namaMember', '$alamatMember')";
$hasil = mysql_query($query);
if ($hasil) echo "<h1>Tambah member sukses</h1>";
else echo "<h1>Tambah member gagal</h1>";
echo "<a href='new.php'>Tambah Member</a>";
?>
Bagaimana mudah bukan membuatnya? Artikel ini sekaligus menjawab pertanyaan salah satu member saya (mas Ropi). Mau mendapatkan triks dan tips yang lain serta bagaimana cara menerapkan PHP di banyak studi kasus? Ikuti saja kursus bersama saya.
[ Download Script ]
Anda ingin mendownload beberapa tool programming 100% gratis?
Silakan download di FREE PROGRAMMING TOOLS.
atau ingin berdonasi untuk pengembangan blog ini cukup dengan $1 via Paypal?
Beberapa artikel terkait
- Membuat Kode Verifikasi Anti Spam Pada Form dengan JpGraph
- Mudahnya Membuat Barcode dengan PHP
- Membuat Paragraf Otomatis Dengan Script PHP
- Membuat Auto Deletion (Hapus Otomatis) Data Dengan Script PHP
- Ide Membuat Advanced Paging dengan PHP
- Ide Membuat Script Upload Download File Dengan Batasan Hak Akses
- Ide Membuat Script PHP untuk Pencarian dengan Multi Kategori
- Script INSERT Data Dengan PHP dan MS. Access
- Ide Membuat Sistem Login Aplikasi Multi User
- Membuat Checkbox Dinamis dan Pemrosesannya
Share this article on:
Kata kunci: PHP - script - unique code generator -





salam kenal mas,
info & tips ini berguna bgt untuk pemula spt saya
makasih…
wah pak guru makin gokil aja neh…
mantap pak guru…
kayak ide saya neh…pencerahan nya sudah terjawab…
kalau saya, pada saat mendaftar status nya masih di pending saat user mendaftar…ketika di aktifkan admin baru bisa login, pas login ada pesan belum di aktivasi…
kayak saya daftar di kursus punya pak guru…
apakah nyari status nya dulu pak guru…
kalau status 0 lom aktif
kalau status 1 aktif
ini di edit oleh admin ya…
nah script nya yang saya masih eror..tolong dong jawaban nya
to rais: ya konsepnya dah betul. yang masih error apanya?
to infopemula: thanks atas komennya. Blog Anda OK juga… semangat terus ya..
untuk ngecek status nya itu lhoh
fungsi logika nya
select user, pass, status from anggota where pass, status
terus
if(mysql_num_rows) > 0)
bener ngak seperti ini atau
if($status == mysql_num_rows)
bingung saya
saya juga gunain teknik kurang lebih mirip kayak gini juga
..
Meskipun autoincrement tetep aja harus dibuat biar unik
asslmlkm,mas gmana cara buat grand total pada php dan mysql semacam buat laporan gitulah mas soalnya kebnyakan scrip bnyak penghitungan secara horizontal nah perhitungan secara vertikalnya gmana mas, meggunakan database mysql?sblmnya,syukron mas
Aslm…
Mas saya minta tolong bisa nggak, script untuk pendaftaran member, nanti data yang telah dientry oleh pendaftar tersebut akan masuk ke email saya,
caranya bagaimana..? terima kasih.
.-= SAID´s last blog ..The Difference Between a 2D, 3D and 4D Ultrasound =-.
to said: gunakan saja function mail(). Sintaksnya adalah mail(tujuan, subject, pesan);
Contoh:
akhirnya tetap ketemu jg di website ini.
Many Thanks Mr. Rosihan…
pak Rosihan Ari sebelumnya saya berterima kasih banyak atas tulisan anda karna sangat membantu saya terutamanya dalam belajar php
pak saya mau tanya bagaimana merelasikan antar tabel dalam php, saya menggunakan php tried
mohon penjelasannya
bangancy,
.-= taufik hidayat(opicbandang)´s last blog ..Edit File PDF =-.
to taufik hidayat: relasi tabel itu di query SQL nya mas, bukan di PHP nya.
kalo bikin otomatis tapi dengan delphi gimana mas caranya..? tolong ya..!!
.-= nur´s last blog ..Refresing Cabe Rawit =-.
to nur: maaf saya dah gak familiar dengan Delphi. Secara konsep hampir sama. Cuman beberapa function yang digunakan untuk mengimplementasikannya di Delphi saya kurang tahu
blog yang kaya gini ni yang aku cari.
thx Pak. Rosihan…
Aku mau nanya ni,cara buat denda untuk pengembalian buku jika terlambat itu gimana yach?? misalnya denda perharinya Rp 1000.
kalau blh kasih scriptnya donng…i need it.
Thx…
to ogie: pada waktu proses peminjaman terjadi, harusnya anda telah menyimpan tanggal harus kembali di tabel peminjaman. Nah sewaktu proses pengembalian, anda cukup buat script atau query untuk mencari selisih hari antara tanggal pengembalian dengan tanggal harus kembali. Lalu selisih hari itu dikalikan dengan denda per hari. Untuk script mencari selisih hari antara dua tanggal silakan buka artikel saya di http://blog.rosihanari.net/script-php-untuk-mencari-selisih-waktu-dan-tanggal
tanks mas buat ilmunya…
Wah, pak bener pak kaya gini mantab…
tapi yang saya mau generator kodenya g di ambil dari id database pak..
gimana tuh pak?
Jadi langsung gt pak..
Terimakasih pak..
pak dosen? bukankah kalo ada user yang mendaftar pada waktu yang sama,akan terjadi duplikat record..?…
kasian kan user harus mendaftar lagi, dengan mengisi form lagi…
ada solusi gak? terimakasih.. bagaimana kalo menggunakan detik…
@hery: oya anda betul mas hery… memang kelemahan dari script di atas seperti yang anda katakan. Mmm… mungkin dibuat skenario spt ini: ketika mau create data baru, otomatis scriptnya langsung INSERT data ID yang tergenerate ke tabelnya. Trus nanti field yang lain modenya update saja. pada contoh di atas, ketika create member baru, langsung ID nya tersimpan ke tabel member, nah begitu si member ini ngisi data yang lain (nama, alamat) lalu dia mensubmit, nah proses yang terjadi adalah update data berdasarkan ID yang sebelumnya tersimpan
Mas terima kasih atas penjelasannya dan saya sudah mencoba, dengan sedikit modifikasi, cuma saya menemui kesulitan dalam memisahkan antara huruf dan angka, karena pada kasus saya huruf di depan jumlahnya tidak tentu sama sehingga tidak bisa diberlakukan menggunakan substr($idMax,1,5), mohon bantuannya ya Mas..terima kasih sebelumnya…
@budi: dalam hal ini usahakan format ID nya harus sama mas, baik itu jumlah digit karakter nya maupun strukturnya. Coba lihat format ID pelanggan PLN, PDAM atau yang lain, pasti sama semua. Karena kalau tidak sama formatnya, jelas akan sulit dalam proses parsingnya. Oleh karena itu sebelum menentukan format ID, sebaiknya survei dulu kira2 jumlah record maks yang akan ditampung berapa. Jumlah record ini nanti akan menentukan jumlah digit ID nya.
terima kasih Mas Rosihan, setelah saya pikir pikir akhirnya saya menemukan jalan keluar dengan sedikit modifikasi Mas, strukturnya seperti itu karena saya membuat penomoran surat otomatis Mas, jadi saya menggunakan fungsi explode untuk memisahkannya Mas, karena saya memberi tanda pemisah..baru kemudian saya kombinasikan dengan punya Mas Rosihan, sekali lagi terima kasih Mas…
terima kasih atas scriptnya mas. Setelah dicoba ternyata berjalan dengan baik, tetapi timbul persoalan apabila fieldnya ditambah. Misalya ditambah kolom kota, telp, email sehingga daftar yg hrs di isi menjadi banyak. Apabila script ini digunakan untuk pendaftaran massal dan yang input terdiri dari beberapa operator, maka operator yg lain harus menunggu operator A selesai menginput data user platinum selanjutnya operator B menginput data user platinum yang lain. mohon bantuannya.
terima kasih pak atas programnya. yang menjadi masalah adalah bagaimana kalo jenisnya bukan dari 1 huruf saja seperti yang ada yaitu A,B,C ? misalnya menjadi 2 huruf atau lebih seperti ST,SIK,PRIN ?
pak…bisa di jelaskan gamblang dengan contoh seprti diatas untuk kasus yg terakhir itu?
Thanx berat//ilmu na bermanfaat bgt
@r3q: ya gak masalah mas, tinggal gabung saja kan?
@r3q: betul mas kelemahan dari script di atas memang begitu. Tapi hal itu bisa disiasati yaitu setiap kali mengenerate kode baru, kode baru itu langsung tersimpan di database nya, namun field yang lain masih kosong.. nah untuk mengisi field yang lain menggunakan mode update. Jadi idenya scr umum begini:
- generate kode
- simpan kode ke db
- baru isi data (field) lain terkait kode tsb
- update semua data terkait kode tsb
ass..
mas cara buat tgl berjalan auto sesuai hari dalam Ms. Access tuh ky gmana..??
tlg kirimn ke e-mail saya..
cara atau script’y..
thanks
saya kira sudah cukup bagus yah blog nich..
soalnya bnyk bgt hal yg bermanfaat di blog ini..
dan inputan2 nya pun sudah cukup lengkap saya kira..
cuma tinggal tampilannya ja yg harus di design supaya lbh menarik lagi..
thanks..
Thanks bos.,.,.,tip n triksnya sangat berguna sekali buat saya….terutama karena saya newbie!!!thanks seklai lagi
makasi byk Mr. Rosihan tentang tutorialx yg sngt bermanfaat bg kami.G’mn contoh scriptx klw kita nau buat sistem informasi akademik n bole g’ php mysql itu untuk membuat billing warnet ? makasi sebelmx…..
@enos palimbong: maaf mas.. saya blm punya script untuk sebuah sistem seperti itu karena terlalu kompleks masalahnya jika dibuat tutorialnya.
MAS GIMANA CARA NGULANG PENOMERAN DARI AWAL LAGI SETELAH BERGANTI BULAN,
MIS : BULAN FEBRUARI 2010
Nomer nya : 2010020001 s/d xxx
BULAN MARET 2010
Nomernya ngulang lagi dari 1 menjadi 2010030001
THX MAS