Đọc số: chuyển từ số nguyên sang đọc bằng chữ (tiếng Việt)
67: sáu mươi bảy
1234007: một triệu hai trăm ba mươi bốn nghìn không trăm lẻ bảy
1234065: một triệu hai trăm ba mươi bốn nghìn không trăm sáu mươi lăm
1234505: một triệu hai trăm ba mươi bốn nghìn năm trăm linh năm
1234501: một triệu hai trăm ba mươi bốn nghìn năm trăm lẻ một
51534001: năm mươi mốt triệu năm trăm ba mươi bốn nghìn không trăm lẻ một
51000001: năm mươi mốt triệu không trăm lẻ một
51000005: năm mươi mốt triệu không trăm linh năm
120021120: một trăm hai mươi triệu không trăm hai mươi mốt nghìn một trăm hai mươi
<?php class Docso { private static function doc3so($so) { $achu = array(" không ", " một ", " hai ", " ba ", " bốn ", " năm ", " sáu ", " bảy ", " tám ", " chín "); $aso = array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9"); $kq = ""; $tram = floor($so / 100); // Hàng trăm $chuc = floor(($so / 10) % 10); // Hàng chục $donvi = floor(($so % 10)); // Hàng đơn vị if ($tram == 0 && $chuc == 0 && $donvi == 0) $kq = ""; if ($tram != 0) { $kq .= $achu[$tram] . "trăm"; if (($chuc == 0)) { if ($donvi == 5 || $donvi == 6) $kq .= " linh"; elseif ($donvi != 0) $kq .= " lẻ"; } } if (($chuc != 0) && ($chuc != 1)) { $kq .= $achu[$chuc] . "mươi"; } if ($chuc == 1) $kq .= " mười"; switch ($donvi) { case 1: if (($chuc != 0) && ($chuc != 1)) { $kq .= " mốt "; } else { $kq .= $achu[$donvi]; } break; case 5: if ($chuc == 0) { $kq .= $achu[$donvi]; } else { $kq .= " lăm"; } break; default: if ($donvi != 0) { $kq .= $achu[$donvi]; } break; } return trim($kq); } public static function doc_so($so) { $so = preg_replace("([a-zA-Z{!@#$%^&*()_+<>?,.}]*)", "", $so); if (strlen($so) <= 21) { $kq = ""; $c = 0; $d = 0; $tien = array("", " nghìn", " triệu", " tỷ", " nghìn tỷ", " triệu tỷ", " tỷ tỷ"); for ($i = 0; $i < strlen($so); $i++) { if ($so[$i] == "0") $d++; else break; } $so = substr($so, $d); for ($i = strlen($so); $i > 0; $i -= 3) { $a[$c] = substr($so, $i, 3); $so = substr($so, 0, $i); $c++; } $a[$c] = $so; for ($i = count($a); $i > 0; $i--) { if (!empty($a[$i]) && strlen(trim($a[$i])) != 0) { if (self::doc3so($a[$i]) != "") { if (($tien[$i - 1] == "")) { if (count($a) > 2) { if (intval($a[$i]) < 10) { if (intval($a[$i]) == 5) $kq .= " không trăm linh " . self::doc3so($a[$i]) . $tien[$i - 1]; else $kq .= " không trăm lẻ " . self::doc3so($a[$i]) . $tien[$i - 1]; } elseif (intval($a[$i]) < 100) $kq .= " không trăm " . self::doc3so($a[$i]) . $tien[$i - 1]; else $kq .= ' ' . self::doc3so($a[$i]) . $tien[$i - 1]; } else $kq .= self::doc3so($a[$i]) . $tien[$i - 1]; } else if ((trim(self::doc3so($a[$i])) == "mười") && ($tien[$i - 1] == "")) { if (intval($a[$i]) < 100) $kq .= " không trăm " . doc3so($a[$i]) . $tien[$i - 1]; else $kq .= ' ' . self::doc3so($a[$i]) . $tien[$i - 1]; } else { if (!empty($kq)) { if (intval($a[$i]) < 10) { if (intval($a[$i]) == 5) $kq .= " không trăm linh " . self::doc3so($a[$i]) . $tien[$i - 1]; else $kq .= " không trăm lẻ " . self::doc3so($a[$i]) . $tien[$i - 1]; } elseif (intval($a[$i]) < 100) $kq .= " không trăm " . self::doc3so($a[$i]) . $tien[$i - 1]; else $kq .= ' ' . self::doc3so($a[$i]) . $tien[$i - 1]; } else $kq .= self::doc3so($a[$i]) . $tien[$i - 1]; } } } } return $kq; } else { return "Số quá lớn!"; } } } $so = 67; echo $so . ": " . Docso::doc_so($so); echo "\n"; $so = 1234007; echo $so . ": " . Docso::doc_so($so); echo "\n"; $so = 1234065; echo $so . ": " . Docso::doc_so($so); echo "\n"; $so = 1234505; echo $so . ": " . Docso::doc_so($so); echo "\n"; $so = 1234501; echo $so . ": " . Docso::doc_so($so); echo "\n"; $so = 51534001; echo $so . ": " . Docso::doc_so($so); echo "\n"; $so = 51000001; echo $so . ": " . Docso::doc_so($so); echo "\n"; $so = 51000005; echo $so . ": " . Docso::doc_so($so); echo "\n"; $so = 120021120; echo $so . ": " . Docso::doc_so($so); echo "\n";