Mình xin giới thiệu tới các bạn code chuyển đổi từ số sang chữ (number to text) bằng PHP. Ví dụ bạn muốn đọc dãy số: 12345, khi dùng hàm này chuyển, các bạn sẽ được chữ là Mười hai nghìn ba trăm bốn mươi lăm. Hàm này rất hữu ích với các bạn đang viết code PHP có liên quan tới chuyển đổi qua lại giữa chữ và số, nhất là trong kế toán.
Demo: https://demo.bienthuy.com/php/php-convert-number-to-text
/* * Convert number to text - developed by Bien Thuy * wWw.BienThuy.Com * @ 2013. All Rights Reserved * */ function convert_numhtber_bienthuy_words($number) { $hh1 = ' '; $hh2 = ' '; $hh3 = ' '; $hh4 = 'negative '; $hh5 = ' point '; $ht = array( 0 => 'không', 1 => 'một', 2 => 'hai', 3 => 'ba', 4 => 'bốn', 5 => 'năm', 6 => 'sáu', 7 => 'bảy', 8 => 'tám', 9 => 'chín', 10 => 'mười', 11 => 'mười một', 12 => 'mười hai', 13 => 'mười ba', 14 => 'mười bốn', 15 => 'mười năm', 16 => 'mười sáu', 17 => 'mười bảy', 18 => 'mười tám', 19 => 'mười chín', 20 => 'hai mươi', 30 => 'ba mươi', 40 => 'bốn mươi', 50 => 'năm mươi', 60 => 'sáu mươi', 70 => 'bảy mươi', 80 => 'tám mươi', 90 => 'chín mươi', 100 => 'trăm', 1000 => 'ngàn', 1000000 => 'triệu', 1000000000 => 'tỷ', 1000000000000 => 'nghìn tỷ', 1000000000000000 => 'ngàn triệu triệu', 1000000000000000000 => 'tỷ tỷ' ); if (!is_numeric($number)) { return false; } if (($number >= 0 && (int) $number < 0) || (int) $number < 0 - PHP_INT_MAX) { // overflow trigger_error( 'convert_numhtber_bienthuy_words only accepts numbers between -' . PHP_INT_MAX . ' and ' . PHP_INT_MAX, E_USER_WARNING ); return false; } if ($number < 0) { return $hh4 . convert_numhtber_bienthuy_words(abs($number)); } $string = $fraction = null; if (strpos($number, '.') !== false) { list($number, $fraction) = explode('.', $number); } switch (true) { case $number < 21: $string = $ht[$number]; break; case $number < 100: $tens = ((int) ($number / 10)) * 10; $units = $number % 10; $string = $ht[$tens]; if ($units) { $string .= $hh1 . $ht[$units]; } break; case $number < 1000: $hundreds = $number / 100; $remainder = $number % 100; $string = $ht[$hundreds] . ' ' . $ht[100]; if ($remainder) { $string .= $hh2 . convert_numhtber_bienthuy_words($remainder); } break; default: $baseUnit = pow(1000, floor(log($number, 1000))); $numBaseUnits = (int) ($number / $baseUnit); $remainder = $number % $baseUnit; $string = convert_numhtber_bienthuy_words($numBaseUnits) . ' ' . $ht[$baseUnit]; if ($remainder) { $string .= $remainder < 100 ? $hh2 : $hh3; $string .= convert_numhtber_bienthuy_words($remainder); } break; } if (null !== $fraction && is_numeric($fraction)) { $string .= $hh5; $words = array(); foreach (str_split((string) $fraction) as $number) { $words[] = $ht[$number]; } $string .= implode(' ', $words); } return $string; }