Numbers to Words Bahasa Indonesia dengan PHP

Beberapa waktu lalu saya membuat program untuk generate report format pdf menggunakan php sebagai bahasa pemorgamanya. Salah satu bagian dari output report adalah konfersi angka menjadi huruf dalam bahasa Indonesia. Sebenarnya Convert Number to Words sudah ada Class php-nya dan tinggal pakai, hanya dengan install pear -> Numbers_Words masalah beres. Namun setelah saya coba untuk versi Indonesia, saya tidak bisa menyertakan angka di belakang koma, dan untuk currency/mata uangnya tidak bisa muncul. saya mencoba versi Numbers_Words-0.16.4.

Akhirnya saya membuat sendiri class untuk Convert Number to Words Bahasa Indonesia, karena masalah bug yang saya sebutkan di atas.  Berikut ini kode php yang saya buat.


  
angka = $angka;
       $this->idr = $idr;  
       $curr = explode('.', $this->angka);
       $len = strlen($curr[1]);  
       if ($len == 1) {
           // tambah nol belakang angka
           $curr[1] .= '0';
      } elseif ($len > 2) {
            // mengambil digit ke tiga setelah koma
              $round_digit = substr($curr[1], 2, 1);          
             // hapus angka seteleah digit ke dua
             $curr[1] = substr($curr[1], 0, 2); }
            $this->desimal=$curr[1];
      }

    function ubah() {

            if ($this->idr){
              if($this->desimal) 
                  {return Konfersi::ConvertAngka($this->angka) . " Rupiah ".
                    Konfersi::ConvertAngka($this->desimal) . " Sen" ;
                }else{
                  return Konfersi::ConvertAngka($this->angka) . " Rupiah"; }    
            } else{ if($this->desimal && $this->desimal > 0) 
                     {return Konfersi::ConvertAngka($this->angka).
                             " Koma ". Konfersi::ConvertAngka($this->desimal) ;}
                else{ return Konfersi::ConvertAngka($this->angka);}
            }
        }


   static function ConvertAngka($angka) {
         $angka = trim($angka);
         $angka = preg_replace('/^0+/', '', $angka);             

             if (($angka > 0) || ($angka < 999999999)) {       

         $satuan = array("", "Satu", "Dua", "Tiga", "Empat", "Lima", "Enam", "Tujuh",
                   "Delapan", "Sembilan", "Sepuluh", "Sebelas", "Dua Belas", 
                   "Tiga Belas", "Empat Belas", "Lima Belas", "Enam Belas", 
                   "Tujuh Belas", "Delapan Belas", "Sembilan Belas");

         $hasil="";
         $Jt = floor($angka/ 1000000);  /* juta */
         $angka-= $Jt * 1000000;
         if ($Jt) { $hasil .= Konfersi::ConvertAngka($Jt) . " Juta";  }               

         $Rb = floor($angka/ 1000);     /* ribu */
         $angka-= $Rb * 1000;
         if ($Rb){
             $hasil .= (empty($hasil) ? "" : " ") .Konfersi::ConvertAngka($Rb) . " Ribu "; }

         $Rs = floor($angka/ 100);      /* ratusan */
         $angka-= $Rs * 100;           

         if($Rs){
                $ratus = $satuan[$Rs];
                $hasil.=$ratus ." Ratus " ;
              }           

        $Pn = floor($angka/ 10);  /* puluhan */
        $angka-= $Pn * 10;
        $st = $angka%10;  /* satuan*/
        if($Pn) {
                if($Pn >1) {
                    $Pn= $satuan[$Pn];
                    $hasil.= $Pn ." Puluh ";
                }

              }

     if ($Pn || $st){
         if ($Pn < 2 ){$hasil.= $satuan[$Pn * 10 + $st];}
     }

     if (empty($hasil)){  $hasil = ""; }  
     $hasil = str_replace("Satu Ribu", "Seribu", $hasil);
     $hasil = str_replace("Satu Ratus", "Seratus", $hasil);
     return $hasil;
     }

            }
        }

        ?>

Contoh penggunaan:
  
 $nomor= new Konfersi(2453,false);
 echo($nomor->ubah()); //Dua Ribu Empat Ratus Lima Puluh Tiga

 $nomor= new Konfersi(24.53,false);
 echo($nomor->ubah()); //Dua Puluh Empat Koma Lima Puluh Tiga

 $nomor= new Konfersi();
 echo($nomor->ConvertAngka(11000)); // Sebelas Ribu

 $nomor= new Konfersi(8000.51,true);
 echo($nomor->ubah()); //Delapan Ribu Rupiah Lima Puluh Satu Sen


 

 Anda juga bisa download filenya NumberWordsBahasa.php.

Semoga tulisan ini bermanfaat.



Komentar

Postingan populer dari blog ini

Pivot Tabel Postgres

Seputar Post Polio