Cara Dinamis Mengubah Angka ke Teks Terbilang dalam Mata Uang Rupiah

Cara Dinamis Mengubah Angka ke Teks Terbilang dalam Mata Uang Rupiah

Table of contents



Cara Dinamis Mengubah Angka ke Teks Terbilang dalam Mata Uang Rupiah dan Bahasa Inggris - Ditengah cuaca yang tidak menentu ini, saya ingin membagikan sebuah kisah, eh kode :D untuk mengubah angka menjadi teks terbilang yang mana merupakan fitur yang sering dibutuhkan dalam pengembangan aplikasi, terutama dalam laporan keuangan, invoice, atau transaksi digital. Artikel yang saya dasarkan pada kisah nyata ini akan membahas cara membuat fungsi PHP yang dinamis, memungkinkan untuk mengonversi angka ke teks terbilang dalam mata uang rupiah atau bahasa Inggris, serta mendukung berbagai jenis mata uang lainnya.

Mengapa Perlu Fungsi Terbilang?

Fungsi terbilang sangat membantu untuk:

  • Kemudahan Membaca: Membuat angka besar lebih mudah dipahami, terutama untuk laporan keuangan.
  • Kebutuhan Dokumen Resmi: Dalam invoice atau kwitansi, teks terbilang memberikan kejelasan tambahan pada nilai transaksi.
  • Fleksibilitas Bahasa dan Mata Uang: Fungsi dinamis dapat digunakan dalam berbagai konteks internasional. 

baca juga: Membuat Konversi Mata Uang Otomatis dengan PHP



Berikut adalah fungsi PHP yang memungkinkan konversi angka ke teks dalam bahasa Indonesia, Inggris, dan mendukung mata uang yang fleksibel.

function terbilang($angka, $lang = 'id', $currency = 'rupiah') {
    $angka = abs($angka);

    // Definisi teks angka dalam bahasa Indonesia dan Inggris
    $numbers = [
        'id' => ["", "satu", "dua", "tiga", "empat", "lima", "enam", "tujuh", "delapan", "sembilan", "sepuluh", "sebelas"],
        'en' => ["", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven"]
    ];

    $tens = [
        'id' => ["", "sepuluh", "dua puluh", "tiga puluh", "empat puluh", "lima puluh", "enam puluh", "tujuh puluh", "delapan puluh", "sembilan puluh"],
        'en' => ["", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"]
    ];

    $currencyNames = [
        'id' => [
            'rupiah' => 'rupiah',
            'dollar' => 'dolar',
            'euro' => 'euro'
        ],
        'en' => [
            'rupiah' => 'rupiah',
            'dollar' => 'dollar',
            'euro' => 'euro'
        ]
    ];

    if (!isset($numbers[$lang]) || !isset($tens[$lang])) {
        return "Language not supported.";
    }

    $huruf = $numbers[$lang];
    $puluhan = $tens[$lang];
    $currencyText = $currencyNames[$lang][$currency] ?? $currency;

    // Aturan terbilang
    if ($angka < 12) {
        return $huruf[$angka];
    } elseif ($angka < 20) {
        return $huruf[$angka - 10] . ($lang === 'id' ? " belas" : "teen");
    } elseif ($angka < 100) {
        return $puluhan[floor($angka / 10)] . ($angka % 10 > 0 ? " " . $huruf[$angka % 10] : "");
    } elseif ($angka < 200) {
        // Ganti "satu ratus" menjadi "seratus" dalam bahasa Indonesia
        return ($lang === 'id' ? "seratus" : "one hundred") . " " . terbilang($angka % 100, $lang);
    } elseif ($angka < 1000) {
        return $huruf[floor($angka / 100)] . ($lang === 'id' ? " ratus " : " hundred ") . terbilang($angka % 100, $lang);
    } elseif ($angka < 1000000) {
        return terbilang(floor($angka / 1000), $lang) . ($lang === 'id' ? " ribu " : " thousand ") . terbilang($angka % 1000, $lang);
    } elseif ($angka < 1000000000) {
        return terbilang(floor($angka / 1000000), $lang) . ($lang === 'id' ? " juta " : " million ") . terbilang($angka % 1000000, $lang);
    } elseif ($angka < 1000000000000) {
        return terbilang(floor($angka / 1000000000), $lang) . ($lang === 'id' ? " miliar " : " billion ") . terbilang($angka % 1000000000, $lang);
    } elseif ($angka < 1000000000000000) {
        return terbilang(floor($angka / 1000000000000), $lang) . ($lang === 'id' ? " triliun " : " trillion ") . terbilang($angka % 1000000000000, $lang);
    }

    return "Out of range";
}

// Kombinasi format Rupiah dan terbilang
function formatDanTerbilang($angka, $lang = 'id', $currency = 'rupiah') {
    $formattedRupiah = number_format($angka, 0, ',', '.');
    $terbilangText = terbilang($angka, $lang, $currency);
    return [
        'formatted' => $formattedRupiah,
        'terbilang' => $terbilangText
    ];
}

Penjelasan Kode

Parameter Dinamis:

$angka: Angka yang akan dikonversi.

$lang: Bahasa teks (id untuk Indonesia, en untuk Inggris).

$currency: Jenis mata uang (rupiah, dollar, euro, dll.).

Baca juga: Membuat Multi Bahasa Dengan PHP

Fleksibilitas Bahasa: Fungsi mendukung lebih dari satu bahasa dengan menggunakan array $numbers.

Dukungan Multi-Mata Uang: Anda dapat dengan mudah menambahkan mata uang baru pada array $currencyNames.

Pemrosesan Rekursif: Fungsi menggunakan rekursi untuk membangun teks terbilang secara dinamis berdasarkan rentang nilai.

Illustrasi diperagakan oleh model

Contoh Penggunaan

Berikut adalah beberapa contoh cara menggunakan fungsi di atas:

$angka = 123456789;

echo '<h2>'.$angka.'</h2>';
echo '<br/>';

// Terbilang dalam bahasa Indonesia
// Format dan tampilkan hasil
$result = formatDanTerbilang($angka, 'id', 'rupiah');
echo "Format Rupiah: " . $result['formatted'] . "<br>";
echo "Terbilang (Bahasa Indonesia): " . $result['terbilang'] . " rupiah<br>";

$resultEn = formatDanTerbilang($angka, 'en', 'rupiah');
echo "Format Dollar: " . $resultEn['formatted'] . "<br>";
echo "Terbilang (Bahasa Inggris): " . $resultEn['terbilang'] . " rupiah<br>";

Lihat penerapannya pada link berikut: Demo

Keunggulan Metode Dinamis

  • Efisiensi: Dengan pendekatan rekursif, kode tetap ringkas meskipun menangani angka besar.
  • Fleksibilitas: Mudah menambah dukungan bahasa atau mata uang baru.
  • Kompatibilitas: Cocok untuk berbagai kebutuhan, seperti aplikasi lokal dan internasional.

Kesimpulan

Menggunakan fungsi terbilang yang dinamis seperti ini akan membantu menciptakan aplikasi yang lebih fleksibel dan efisien. Dengan sedikit penyesuaian, Anda dapat menambahkan dukungan untuk bahasa dan mata uang lain sesuai kebutuhan.

Gunakan kode di atas untuk meningkatkan profesionalitas dan efisiensi dalam aplikasi PHP, Adios!



Artikel Terkait