Mungkin ada yang pernah melihat sebuah kuitansi yang menunjukkan nominal uang dan kemudian dilanjutkan dengan tulisan terbilang dari angka tersebut. Gak cuma itu aja, kadang juga ditemui ketika anda ingin menyetor uang di bank. Anda disuruh untuk menuliskan terbilang nominal uang yang ingin disetor. Nah, apakah kasus seperti ini dapat dibuat secara otomatis? Jawabannya tentu bisa!
Entah anda saat ini sedang mencari kode untuk mewujudkan hal seperti itu hingga tersasar ke sini :D. Atau mungkin suatu saat di kemudian hari anda menjadi seorang IT programmer di suatu perusahaan, maka tidak ada salahnya jika menyimpan kode buatan saya ini.
Bermain Logika
Bagaimana sih logika sederhananya? Logika sederhananya adalah menuangkan isi pikiran manusia ke dalam kode. Coba anda pelajari bagaimana anda membaca suatu angka. Pasti anda belah-belah angka tersebut dengan 3 angka dari arah belakang menuju arah depan. Setelah dibelah-belah (bukan belah duren ya) maka potongan yang terdiri dari 3 angka itu siap dibaca. Anda dapat menggunakan logika pembacaan dari belakang atau dari depan.
Pada kode yang saya buat ini, potongan angka dibaca dari depan. Anda harus menentukan tingkatan potongan angka itu, berikut ini saya berikan contoh :
Angka = 74376364344
Potongan = 74, 376, 364, 344
Jumlah potongan adalah 4
Potongan 0 -> 74
Potongan 1 -> 376
Potongan 2 -> 364
Potongan 3 -> 344
Buat level tingkatan :
Tingkat 1 = Ribu
Tingkat 2 = Juta
Tingkat 3 = Miliar
Tingkat 4 = Trilyun
Catatan: Tidak ada tingkat 0
Rumus menentukan tingkatan potongan = |Potongan - (Jumlah Potongan - 1)|
Sesuai rumus, maka dihasilkan :
Potongan 0 = 74, tingkatnya adalah |0 - (4 - 1)| = 3
Potongan 1 = 376, tingkatnya adalah |1 - (4 - 1)| = 2
Potongan 2 = 364, tingkatnya adalah |2 - (4 - 1)| = 1
Potongan 3 = 344, tingkatnya adalah |3 - (4 - 1)| = 0
Nah tinggal membaca secara keseluruhan dari potongan 0 hingga 4. Tiap potongan dibaca menggunakan tingkat ratus. Namun jika dalam potongan jumlah angkanya 1 ataupun 2, maka harus diberikan kondisi. Saya telah membuatkan fungsi
readTrioNumberId()
untuk membaca 3 angka dalam potongan.Tiap potongan angka dibaca dan diantara bacaan potongan angka, tambahkan nama tingkatannya.
74 Miliar, 375 Juta, 364 Ribu, 344
Potongan dengan tingkat 0 pasti selalu berada diakhir, maka tidak ada tambahan setelahnya.
Namun ada beberapa kondisi khusus, misal potongan dengan angka 100, jika dia berada di tingkat 1, maka harus menjadi "Seribu".
Kode PHP
Berikut ini kode untuk mengubah angka menjadi tulisan terbilang berbahasa Indonesia menggunakan PHP. Buat kelas StringManip terlebih dahulu pada berkas StripManip.php.
<?php class StringManip { private $id_number_names = array( '0' => 'Nol', '1' => 'Satu', '2' => 'Dua', '3' => 'Tiga', '4' => 'Empat', '5' => 'Lima', '6' => 'Enam', '7' => 'Tujuh', '8' => 'Delapan', '9' => 'Sembilan' ); ... } ?>
Fungsi untuk membaca angka dengan potongan kelipatan 3.
private function readTrioNumberId($value) { $sentence = null; $value = (int)$value; $str_val = (string)$value; $value_length = strlen($value); switch ($value_length) { case 1: $sentence .= $this->id_number_names[$value]; break; case 2: if ($value == 10) { $sentence .= 'Sepuluh'; } else if ($value == 11) { $sentence .= 'Sebelas'; } else { if ($value < 20) { if (strlen($value) == 2) { $sentence .= $this->id_number_names[$str_val[1]] . ' Belas'; } else { $sentence .= $this->id_number_names[$value]; } } else { $sentence .= $this->id_number_names[$str_val[0]] . ' Puluh'; if ($str_val[1] != '0') { $sentence .= ' ' . $this->id_number_names[$str_val[1]]; } } } break; case 3: if ($value == 100) { $sentence .= 'Seratus'; } else if ($str_val[0] == '1') { $sentence .= 'Seratus ' . $this->readTrioNumberId(substr($str_val, 1, $value_length)); } else { $sentence .= $this->id_number_names[$str_val[0]] . ' Ratus'; $residu = substr($str_val, 1, $value_length); if ((int)$residu > 0) { $sentence .= ' ' . $this->readTrioNumberId($residu); } } break; } return $sentence; }
Fungsi untuk membentuk penyebutan angka.
public function toTerbilang($value) { $sentence = null; $parts = explode(',', number_format($value)); $part_length = count($parts); $grades = array( 1 => 'Ribu', 2 => 'Juta', 3 => 'Miliar', 4 => 'Trilyun', ); for ($i = 0; $i < $part_length; $i++) { $int_val = (int)$parts[$i]; if ($int_val > 0) { $grade = abs($i-($part_length-1)); if ($grade == 1 && $int_val == 1) { $sentence .= 'Se' . strtolower($grades[$grade]); } else { $sentence .= $this->readTrioNumberId($parts[$i]); if (isset($grades[$grade])) { $sentence .= ' ' . $grades[$grade] . ' '; } } } } return $sentence; }
Kelas StringManip sudah siap digunakan, berikut adalah contoh penggunaannya :
<?php include('StringManip.php'); $strman = new StringManip(); $angka = 74376364344; $terbilang = $strman->toTerbilang($angka); echo number_format($angka) . ' = ' . $terbilang; ?>Hasil :
74,376,364,344 = Tujuh Puluh Empat Miliar Tiga Ratus Tujuh Puluh Enam Juta Tiga Ratus Enam Puluh Empat Ribu Tiga Ratus Empat Puluh Empat
Penutup
Demikianlah tulisan saya kali ini, semoga dapat membantu anda sekalian. Jika akan disebarkan, mohon cantumkan sumber. Kritik dan sarannya sangat dibutuhkan untuk terus berkembang. Silahkan tinggalkan komentar anda mengenai tulisan pada kolom komentar jika berkenan, terimakasih .
Tidak ada komentar:
Posting Komentar