<?php
  
///////////////////////////////////////////////////
  // Скрипт Число (цена) прописью
  // Версия 1.00
  // 10.06.2005 (C) Федорченко А.А.  (antf@inbox.ru)
  ///////////////////////////////////////////////////
  //для преобразования числа - функция write_number_in_words($num)
  //для преобразования цены  - фукнция write_price_in_words($price)
  //возможный формат цены: 20, 26.12
  ///////////////////////////////////////////////////

//  print write_price_in_words(21.11);
  //цена прописью

//вставка для отображения кода в браузере
$uri=@$_SERVER["REQUEST_URI"];
$host=@$_SERVER["HTTP_HOST"];
$self=str_replace("\\","/",__FILE__);
$self=explode("/",$self);
$self=array_pop($self);
$selfreg=preg_quote($self, "/");

if (
strpos($uri, $self) !== false) {
 
$code=implode("",file(__FILE__));
 echo 
"<title>Исходный код файла \"{$host}/{$self}\"</title>";
 
highlight_string($code);
 exit;
}
//конец вставки для отображения кода

  
function write_price_in_words($price)
  {
    
$price = number_format($price, 2, '.', '');
    
$point = strpos($price, '.');
    
//отделяем рубли от копеек
    
if(!empty($point))
    {
      
$rub = substr($price, 0, $point);
      
$kop = substr($price, $point + 1);
    }
    
//преобразуем рубли
    
$str = write_number_in_words($rub) ;
    
//пишем рублей(ь,я)
    
$word = " рублей";
    
//последнее число
    
if (strlen($rub))
     
$last_digit = $rub[(strlen($rub) - 1)];
    else
     
$last_digit = "";
    
//предпоследнее число
    
if (strlen($rub)>1)
     
$pred_last_digit = $rub[(strlen($rub) - 2)];
    else
     
$pred_last_digit = "";
    if(
$last_digit == '1' && $pred_last_digit != '1')
      
$word = " рубль";
    elseif((
$last_digit == '2' || $last_digit == '3' || $last_digit == '4') && $pred_last_digit != '1')
      
$word = " рубля";
    
$str .= $word;
    
//преобразуем копейки
    
if(!empty($kop))
    {

      
$str .= write_number_in_words($kop, 'femininum') ;
      
//пишем копейка (и, ек)
      
$word = " копеек";
      
//последнее число
      
$last_digit = $kop[(strlen($kop) - 1)];
      
//предпоследнее число
      
$pred_last_digit = $kop[(strlen($kop) - 2)];
      if(
$last_digit == '1' && $pred_last_digit != '1')
           
$word = " копейка";
         elseif((
$last_digit == '2' || $last_digit == '3' || $last_digit == '4') && $pred_last_digit != '1' )
           
$word = " копейки";
      
$str .= $word;
    }
    
setlocale(LC_ALL, 'ru_RU.cp1251');
    return 
ucfirst($str);
  }

  
//допустимый диапазон чисел 0 .. 999999
  //число прописью
  
function write_number_in_words ($num, $genus = 'masculinum')
  {
    
//разряд: единицы, десятки, сотни, тысячи
    
$cur_order = "единицы";
    
$cur_thousands_order = "единицы";
    if(
$num == 0)
      return 
" 00";
    
$num = strval($num);
    
$limit = strlen($num) - 1;
    
$next_digit = '0';
    
$str=""; $jk=0;
    for(
$i = $limit; $i >= 0; $i--)
    {
    
$jk++;
      
//сотни
      
if($cur_order == "сотни")
      {
        
$str = write_units_hundreds($num[$i]).$str;
        if (
$jk==3) { $i--;
         
$cur_order = "единицы";  //$next_digit = '0';
        
}
      }
      
//десятки
      
if($cur_order == "десятки")
      {
        
$next_d = ($next_digit)?$next_digit:'';
        
$str = write_units_tens($num[$i], $next_d).$str;
        
$cur_order = "сотни";
        
$next_digit = '0';
      }
      
//единицы
      
if($cur_order == "единицы")
      {
       if (
$jk>2) {
        if (
$i>0 && $num[$i-1] == "1") {
         
$next_digit = $num[$i];
         
$str = " тысяч".$str;
        }
        else 
         if (
$i>-1)
          
$str = write_units_thousands_units($num[$i]).$str;
       }
       else {
        if (
$i>0 && $num[$i-1] == "1")
          
$next_digit = $num[$i];
        else {
          
$str = write_units($num[$i], $genus);
        }
       }
       
$cur_order = "десятки";
      }
    }
    return(
$str);
  }

    
//принадлежит функции write_number_in_words
    //преобразует десятки
    
function write_units_tens ($tens, $next_digit)
    {
      
$str_tens="";
      
$tens .= $next_digit;
      if(
$tens == 1) $str_tens = " десять";
      if(
$tens == 2) $str_tens = " двадцать";
      if(
$tens == 3) $str_tens = " тридцать";
      if(
$tens == 4) $str_tens = " сорок";
      if(
$tens == 5) $str_tens = " пятьдесят";
      if(
$tens == 6) $str_tens = " шестьдесят";
      if(
$tens == 7) $str_tens = " семьдесят";
      if(
$tens == 8) $str_tens = " восемьдесят";
      if(
$tens == 9) $str_tens = " девяносто";
//      if($tens == 10) $str_tens = " десять";
      
if($tens == 11) $str_tens = " одиннадцать";
      if(
$tens == 12) $str_tens = " двенадцать";
      if(
$tens == 13) $str_tens = " тринадцать";
      if(
$tens == 14) $str_tens = " четырнадцать";
      if(
$tens == 15) $str_tens = " пятнадцать";
      if(
$tens == 16) $str_tens = " шестнадцать";
      if(
$tens == 17) $str_tens = " семнадцать";
      if(
$tens == 18) $str_tens = " восемнадцать";
      if(
$tens == 19) $str_tens = " девятнадцать";
      return(
$str_tens);
    }

    
//принадлежит функции write_number_in_words
    //преобразует сотни
    
function write_units_hundreds ($hundreds)
    {
      
$str_hundreds="";
      if(
$hundreds == 1) $str_hundreds = " сто";
      if(
$hundreds == 2) $str_hundreds = " двести";
      if(
$hundreds == 3) $str_hundreds = " триста";
      if(
$hundreds == 4) $str_hundreds = " четыреста";
      if(
$hundreds == 5) $str_hundreds = " пятьсот";
      if(
$hundreds == 6) $str_hundreds = " шестьсот";
      if(
$hundreds == 7) $str_hundreds = " семьсот";
      if(
$hundreds == 8) $str_hundreds = " восемьсот";
      if(
$hundreds == 9) $str_hundreds = " девятьсот";
      return(
$str_hundreds);
    }

    
//принадлежит функции write_number_in_words
    //преобразует единицы тысячного разряда
    
function write_units_thousands_units ($hundreds)
    {
      
$str_hundreds="";
      if(
$hundreds == 0) $str_hundreds = " тысяч";
      if(
$hundreds == 1) $str_hundreds = " одна тысяча";
      if(
$hundreds == 2) $str_hundreds = " две тысячи";
      if(
$hundreds == 3) $str_hundreds = " три тысячи";
      if(
$hundreds == 4) $str_hundreds = " четыре тысячи";
      if(
$hundreds == 5) $str_hundreds = " пять тысяч";
      if(
$hundreds == 6) $str_hundreds = " шесть тысяч";
      if(
$hundreds == 7) $str_hundreds = " семь тысяч";
      if(
$hundreds == 8) $str_hundreds = " восемь тысяч";
      if(
$hundreds == 9) $str_hundreds = " девять тысяч";
      return(
$str_hundreds);
    }

    
//принадлежит функции write_number_in_words
    //преобразует единицы
    
function write_units ($units, $genus='masculinum')
    {
      
$str_units="";
      if(
$genus == 'masculinum')
      {
           if(
$units == 1) $str_units = " один";
           if(
$units == 2) $str_units = " два";
      }
      if(
$genus == 'femininum')
      {
           if(
$units == 1) $str_units = " одна";
           if(
$units == 2) $str_units = " две";

      }
      if(
$units == 3) $str_units = " три";
      if(
$units == 4) $str_units = " четыре";
      if(
$units == 5) $str_units = " пять";
      if(
$units == 6) $str_units = " шесть";
      if(
$units == 7) $str_units = " семь";
      if(
$units == 8) $str_units = " восемь";
      if(
$units == 9) $str_units = " девять";
      return(
$str_units);
    }
?>