Advertisement
leors

[ PHP ] número por extenso

Jan 19th, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.27 KB | None | 0 0
  1. <?php
  2. function extenso($valor=0, $maiusculas=false)
  3. {
  4.     // verifica se tem virgula decimal
  5.     if (strpos($valor, ",") > 0)
  6.     {
  7.         // retira o ponto de milhar, se tiver
  8.         $valor = str_replace(".", "", $valor);
  9.  
  10.         // troca a virgula decimal por ponto decimal
  11.         $valor = str_replace(",", ".", $valor);
  12.     }
  13.     $singular = array("centavo", "real", "mil", "milhão", "bilhão", "trilhão", "quatrilhão");
  14.     $plural = array("centavos", "reais", "mil", "milhões", "bilhões", "trilhões",
  15.     "quatrilhões");
  16.  
  17.     $c = array("", "cem", "duzentos", "trezentos", "quatrocentos",
  18.     "quinhentos", "seiscentos", "setecentos", "oitocentos", "novecentos");
  19.     $d = array("", "dez", "vinte", "trinta", "quarenta", "cinquenta",
  20.     "sessenta", "setenta", "oitenta", "noventa");
  21.     $d10 = array("dez", "onze", "doze", "treze", "quatorze", "quinze",
  22.     "dezesseis", "dezesete", "dezoito", "dezenove");
  23.     $u = array("", "um", "dois", "três", "quatro", "cinco", "seis",
  24.     "sete", "oito", "nove");
  25.  
  26.     $z = 0;
  27.  
  28.     $valor = number_format($valor, 2, ".", ".");
  29.     $inteiro = explode(".", $valor);
  30.     $cont = count($inteiro);
  31.     for ($i = 0; $i < $cont; $i++)
  32.     for ($ii = strlen($inteiro[$i]); $ii < 3; $ii++)
  33.     $inteiro[$i] = "0" . $inteiro[$i];
  34.  
  35.     $fim = $cont - ($inteiro[$cont - 1] > 0 ? 1 : 2);
  36.     $rt = '';
  37.     for ($i = 0; $i < $cont; $i++)
  38.     {
  39.         $valor = $inteiro[$i];
  40.         $rc = (($valor > 100) && ($valor < 200)) ? "cento" : $c[$valor[0]];
  41.         $rd = ($valor[1] < 2) ? "" : $d[$valor[1]];
  42.         $ru = ($valor > 0) ? (($valor[1] == 1) ? $d10[$valor[2]] : $u[$valor[2]]) : "";
  43.  
  44.         $r = $rc . (($rc && ($rd || $ru)) ? " e " : "") . $rd . (($rd && $ru) ? " e " : "") . $ru;
  45.         $t = $cont - 1 - $i;
  46.         $r .= $r ? " " . ($valor > 1 ? $plural[$t] : $singular[$t]) : "";
  47.         if ($valor == "000")
  48.             $z++;
  49.         elseif
  50.             ($z > 0)
  51.             $z--;
  52.         if (($t == 1) && ($z > 0) && ($inteiro[0] > 0))
  53.             $r .= ( ($z > 1) ? " de " : "") . $plural[$t];
  54.         if ($r)
  55.             $rt = $rt . ((($i > 0) && ($i <= $fim) && ($inteiro[0] > 0) && ($z < 1)) ? ( ($i < $fim) ? ", " : " e ") : " ") . $r;
  56.     }
  57.  
  58.     if (!$maiusculas)
  59.     {
  60.         return($rt ? $rt : "zero");
  61.     }
  62.     elseif ($maiusculas == "2")
  63.     {
  64.         return(strtoupper($rt) ? strtoupper($rt) : "Zero");
  65.     }
  66.     else
  67.     {
  68.         return(ucwords($rt) ? ucwords($rt) : "Zero");
  69.     }
  70. }
  71.  
  72. $valorContrato = '123.45";
  73. echo extenso($valorContrato);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement