Convert numbers to words (Bulgarian language)


/ Published in: PHP
Save to your folder(s)

This function accept one parameter (integer or float) and returns the same number writed with words. Useful for currencies and invoices.


Copy this code and paste it in your HTML
  1. function slovom($num, $tri = 0) {
  2. $edinici = array(
  3. 0 => "",
  4. 1 => array(
  5. 0 => " един",
  6. 1 => "",
  7. 2 => " eдин",
  8. 3 => " eдин",
  9. 4 => " eдин",
  10. 5 => " eдин",
  11. 6 => " eдин",
  12. 7 => " eдин",
  13. 8 => " eдин",
  14. 9 => " eдин",
  15. 10 => " eдин",
  16. ),
  17. 2 => array(
  18. 0 => " два",
  19. 1 => " двe",
  20. 2 => " два",
  21. 3 => " два",
  22. 4 => " два",
  23. 5 => " два",
  24. 6 => " два",
  25. 7 => " два",
  26. 8 => " два",
  27. 9 => " два",
  28. 10 => " два",
  29. ),
  30. 3 => " три",
  31. 4 => " четири",
  32. 5 => " пет",
  33. 6 => " шест",
  34. 7 => " седем",
  35. 8 => " осем",
  36. 9 => " девет",
  37. 10 => " десет",
  38. 11 => " единадесет",
  39. 12 => " дванадесет",
  40. 13 => " тринадесет",
  41. 14 => " четиринадесет",
  42. 15 => " петнадесет",
  43. 16 => " шестнадесет",
  44. 17 => " седемнадесет",
  45. 18 => " осемнадесет",
  46. 19 => " деветнадесет"
  47. );
  48.  
  49. $desetici = array(
  50. 0 => "",
  51. 1 => "",
  52. 2 => " двадесет",
  53. 3 => " тридесет",
  54. 4 => " четиридесет",
  55. 5 => " петдесет",
  56. 6 => " шестдесет",
  57. 7 => " седемдесет",
  58. 8 => " осемдесет",
  59. 9 => " деведесет"
  60. );
  61.  
  62. $stotici = array (
  63. 0 => "",
  64. 1 => " сто",
  65. 2 => " двеста",
  66. 3 => " триста",
  67. 4 => " четиристотин",
  68. 5 => " петстотин",
  69. 6 => " шестстотин",
  70. 7 => " седемстотин",
  71. 8 => " осемстотин",
  72. 9 => " деветстотин",
  73. );
  74.  
  75. $tripleti = array(
  76. 0 => "",
  77. 1 => array(
  78. 0 => " хиляда",
  79. 1 => " хиляди"),
  80. 2 => array(
  81. 0 => " милион",
  82. 1 => " милиона"),
  83. 3 => array(
  84. 0 => " билион",
  85. 1 => " билионa"),
  86. 4 => array(
  87. 0 => " трилион",
  88. 1 => " трилиона"),
  89. 5 => array(
  90. 0 => " квадрилион",
  91. 1 => " квадрилиона"),
  92. 6 => array(
  93. 0 => " квинтилион",
  94. 1 => " квинтилиони"),
  95. 7 => array(
  96. 0 => " сикстилион",
  97. 1 => " сикстилион"),
  98. 8 => array(
  99. 0 => " септилион",
  100. 1 => " септилиони"),
  101. 9 => array(
  102. 0 => " октилион",
  103. 1 => " октилион"),
  104. 10 => array(
  105. 0 => " нонилион",
  106. 1 => " нонилиои")
  107. );
  108.  
  109. //взимаме само цялата част от числото, без стойността
  110. //след десетичната запетая
  111. $n = explode(".", $num);
  112. $num = $n[0];
  113. $r = (int) ($num / 1000);
  114. $x = ($num / 100) % 10;
  115. $y = $num % 100;
  116.  
  117. $str = "";
  118.  
  119. // стотици
  120. if ($x > 0) {
  121. $str = $stotici[$x];
  122. }
  123. // единици и десетици
  124. if ($y < 20) {
  125. if($y == 0 && $r > 0) {
  126. $str = ' и '.$str;
  127. }
  128. if(is_array($edinici[$y]) && isset($edinici[$y][$tri])) {
  129. $str .= ' '.$edinici[$y][$tri];
  130. }
  131. else {
  132. $str .= ' '.$edinici[$y];
  133. }
  134. }
  135. else {
  136. if($edinici[$y % 10]) {
  137. $str .= $desetici[(int) ($y / 10)];
  138. $str .= ' и';
  139. if(is_array($edinici[$y % 10]) && isset($edinici[$y % 10][$tri])) {
  140. $str .= $edinici[$y % 10][$tri];
  141. }
  142. else {
  143. $str .= $edinici[$y % 10];
  144. }
  145. }
  146. else {
  147. $str .= ' и'.$desetici[(int) ($y / 10)];
  148. }
  149. }
  150.  
  151. // добавяне на модификатор - хиляди, милиони, билиони
  152.  
  153. if ($str != "") {
  154. //Ако има зададени опции за единствено и мн. число
  155. if(is_array($tripleti[$tri])) {
  156. //мн. число ли е?
  157. if($num > 1) {
  158. $str .= $tripleti[$tri][1];
  159. }
  160. else {
  161. $str .= $tripleti[$tri][0];
  162. }
  163. }
  164. else {
  165. $str .= $tripleti[$tri];
  166. }
  167. $str = str_replace('един стотин', 'сто', $str);
  168. $str = str_replace('един хиляди', 'хиляда', $str);
  169. }
  170.  
  171. //ако сме на първата стъпка (т.е. определяме числото до стотици)
  172. if($tri == 0) {
  173. //добавяме префикс за лева
  174. $str .= ' лева';
  175. //и ако има сетнати стотинки ги добавяме и тях
  176. if(isset($n[1])) {
  177. $str .= ' и '.$n[1].'ст.';
  178. }
  179. }
  180.  
  181. // продължаване рекрусивно?
  182. if ($r > 0) {
  183. return slovom($r, $tri+1).$str;
  184. }
  185. else {
  186. return $str;
  187. }
  188. }

URL: http://vladimir-ivanov.net

Report this snippet


Comments

RSS Icon Subscribe to comments

You need to login to post a comment.