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;
}
4.9/5 - (4223 bình chọn)

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *