تبدیل عدد به حروف در PHP
در این نوشته میخواهیم راجب این موضوع صحبت کنیم که چطور میتوان عدد را به حروف تبدیل کرد. در این نوشته میخواهیم قطعه کدی را با شما به اشتراک بگذاریم که قابلیت تبدیل به حروف برای اعداد بسیار بزرگ تا دسیلیون (یعنی 10 به توان 33) را دارد. کافی است قطعه کد پایین را کپی کرده و عدد مورد نظرتان را به عنوان پارامتر به تابع convertNumberToWords پاس بدهید تا تابع خروجی مطلوب را تولید کند. به قطعه کد زیر توجه کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
<?php $words = [ [ "", "یک", "دو", "سه", "چهار", "پنج", "شش", "هفت", "هشت", "نه" ], [ "ده", "یازده", "دوازده", "سیزده", "چهارده", "پانزده", "شانزده", "هفده", "هجده", "نوزده", "بیست" ], [ "", "", "بیست", "سی", "چهل", "پنجاه", "شصت", "هفتاد", "هشتاد", "نود" ], [ "", "یکصد", "دویست", "سیصد", "چهارصد", "پانصد", "ششصد", "هفتصد", "هشتصد", "نهصد" ], [ '', " هزار ", " میلیون ", " میلیارد ", " بیلیون ", " بیلیارد ", " تریلیون ", " تریلیارد ", " کوآدریلیون ", " کادریلیارد ", " کوینتیلیون ", " کوانتینیارد ", " سکستیلیون ", " سکستیلیارد ", " سپتیلیون ", " سپتیلیارد ", " اکتیلیون ", " اکتیلیارد ", " نانیلیون ", " نانیلیارد ", " دسیلیون " ] ]; $splitter = " و "; function convertNumberToWords($input) { global $words, $splitter; $zero = "صفر"; if ($input == 0) { return $zero; } if (strlen($input) > 66) { return "خارج از محدوده"; } //Split to sections $splittedNumber = prepareNumber($input); $result = []; $splitLength = count($splittedNumber); for ($i = 0; $i < $splitLength; $i++) { $sectionTitle = $words[4][$splitLength - ($i + 1)]; $converted = threeNumbersToLetter($splittedNumber[$i]); if ($converted !== "") { array_push($result, $converted . $sectionTitle); } } return join($splitter, $result); } function prepareNumber($num) { if (gettype($num) == "integer" || gettype($num) == "double") { $num = (string) $num; } $length = strlen($num) % 3; if ($length == 1) { $num = "00" . $num; } else if ($length == 2) { $num = "0" . $num; } return str_split($num, 3); } function threeNumbersToLetter($num) { global $words, $splitter; if ((int) preg_replace('/\D/', '', $num) == 0) { return ""; } $parsedInt = (int) preg_replace('/\D/', '', $num); if ($parsedInt < 10) { return $words[0][$parsedInt]; } if ($parsedInt <= 20) { return $words[1][$parsedInt - 10]; } if ($parsedInt < 100) { $one = $parsedInt % 10; $ten = ($parsedInt - $one) / 10; if ($one > 0) { return $words[2][$ten] . $splitter . $words[0][$one]; } return $words[2][$ten]; } $one = $parsedInt % 10; $hundreds = ($parsedInt - $parsedInt % 100) / 100; $ten = ($parsedInt - (($hundreds * 100) + $one)) / 10; $out = [$words[3][$hundreds]]; $secondPart = (( $ten * 10 ) + $one); if ($secondPart > 0) { if ($secondPart < 10) { array_push($out, $words[0][$secondPart]); } else if ($secondPart <= 20) { array_push($out, $words[1][$secondPart - 10]); } else { array_push($out, $words[2][$ten]); if ($one > 0) { array_push($out, $words[0][$one]); } } } return join($splitter, $out); } |
برای مثال خروجی قطعه کد بالا برای ورودی “454554354570987097865433246543521134” عبارت “چهار تریلیون و پنجاه و چهار بیلیارد و پانصد و پنجاه و چهار بیلیون و سیصد و پنجاه و چهار میلیارد و پانصد و هفتاد میلیون و نود و نه هزار و سی و پنج” خواهد بود.
شاد باشید.
7+

6 thoughts on “تبدیل عدد به حروف در PHP”
عالی بود
عالی بود فقط یک ایراد داره اونم اینکه اعداد اعشاری رو حساب نمی کنه.
در کل بسیار ممنون.
اگه اونم اضافه کنید، عالی میشه.
میتونیم برا اعداد اعشار تابع رو به صورت ((convertNumberToWords(round($x
استفاده کنیم