<? /* extenso.php Copyright (C) 2002 Lyma This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Lyma (lyma@lymas.com) http://lymas.com Esta fun��o recebe um valor num�rico e retorna uma string contendo o valor de entrada por extenso. entrada: $valor (use ponto para centavos.) Ex.: echo extenso("12428.12"); //retorna: doze mil, quatrocentos e vinte e oito reais e doze centavos ou use: echo extenso("12428.12", true); //esta linha retorna: Doze Mil, Quatrocentos E Vinte E Oito Reais E Doze Centavos sa�da..: string com $valor por extenso em reais e pode ser com iniciais em mai�sculas (true) ou n�o. ------------------------------------------------------------------------------------------------------------------- Modificado por Claudio Monteoliva - claudio@simplesefacil.com tamb�m � poss�vel passar o valor para a funcao com a v�irgula decimal. exemplo: echo extenso("12428,12"); // o retorna � o mesmo que a passagem com ponto decimal */ function extenso($valor=0, $maiusculas=false){ global $rt; // verifica se tem virgula decimal if (strpos($valor,",") > 0) { // retira o ponto de milhar, se tiver $valor = str_replace(".","",$valor); // troca a virgula decimal por ponto decimal $valor = str_replace(",",".",$valor); } $singular = array("Centavo", "Real", "Mil", "Milh�o", "Bilh�o", "Trilh�o", "Quatrilh�o"); $plural = array("Centavos", "Reais", "Mil", "Milh�es", "Bilh�es", "Trilh�es","Quatrilh�es"); $c = array("", "Cem", "Duzentos", "Trezentos", "Quatrocentos","Quinhentos", "Seiscentos", "Setecentos", "Oitocentos", "Novecentos"); $d = array("", "Dez", "Vinte", "Trinta", "Quarenta", "Cinquenta","Sessenta", "Setenta", "Oitenta", "Noventa"); $d10 = array("Dez", "Onze", "Doze", "Treze", "Quatorze", "Quinze","Dezesseis", "Dezesete", "Dezoito", "Dezenove"); $u = array("", "Um", "Dois", "Tr�s", "Quatro", "Cinco", "Seis","Sete", "Oito", "Nove"); $z=0; $valor = number_format($valor, 2, ".", "."); $inteiro = explode(".", $valor); for($i=0;$i<count($inteiro);$i++) for($ii=strlen($inteiro[$i]);$ii<3;$ii++) $inteiro[$i] = "0".$inteiro[$i]; $fim = count($inteiro) - ($inteiro[count($inteiro)-1] > 0 ? 1 : 2); for ($i=0;$i<count($inteiro);$i++) { $valor = $inteiro[$i]; $rc = (($valor > 100) && ($valor < 200)) ? "cento" : $c[$valor[0]]; $rd = ($valor[1] < 2) ? "" : $d[$valor[1]]; $ru = ($valor > 0) ? (($valor[1] == 1) ? $d10[$valor[2]] : $u[$valor[2]]) : ""; $r = $rc.(($rc && ($rd || $ru)) ? " e " : "").$rd.(($rd && $ru) ? " e " : "").$ru; $t = count($inteiro)-1-$i; $r .= $r ? " ".($valor > 1 ? $plural[$t] : $singular[$t]) : ""; if ($valor == "000")$z++; elseif ($z > 0) $z--; if (($t==1) && ($z>0) && ($inteiro[0] > 0)) $r .= (($z>1) ? " de " : "").$plural[$t]; if ($r) $rt = $rt . ((($i > 0) && ($i <= $fim) && ($inteiro[0] > 0) && ($z < 1)) ? ( ($i < $fim) ? ", " : " e ") : " ") . $r; } if(!$maiusculas){ return (strtolower($rt) ? strtolower($rt) : "zero"); } else { return($rt ? $rt : "Zero"); } } $valor=412507; echo extenso ($valor,$maiusculas=true)."<br>"; ?>