numero.inc.php
Código PHP:
<?php
function numerotexto ($numero)
{
// Primero tomamos el numero y le quitamos los caracteres especiales y extras
// Dejando solamente el punto "." que separa los decimales
// Si encuentra mas de un punto, devuelve error.
// NOTA: Para los paises en que el punto y la coma se usan de forma
// inversa, solo hay que cambiar la coma por punto en el array de "extras"
// y el punto por coma en el explode de $partes
$extras= array("/[\$]/","/ /","/,/","/-/");
$limpio=preg_replace($extras,"",$numero);
$partes=explode(".",$limpio);
if (count($partes)>2) {
return "Error, el número no es correcto";
exit();
}
// Ahora explotamos la parte del numero en elementos de un array que
// llamaremos $digitos, y contamos los grupos de tres digitos
// resultantes
$digitos_piezas=chunk_split ($partes[0],1,"#");
$digitos_piezas=substr($digitos_piezas,0,strlen($digitos_piezas)-1);
$digitos=explode("#",$digitos_piezas);
$todos=count($digitos);
$grupos=ceil (count($digitos)/3);
// comenzamos a dar formato a cada grupo
$unidad = array ('UN','DOS','TRES','CUATRO','CINTO','SEIS','SIETE','OCHO','NUEVE');
$decenas = array ('DIEZ','ONCE','DOCE', 'TRECE','CATORCE','QUINCE');
$decena = array ('DIECI','VEINTI','TREINTA','CUARENTA','CINCUENTA','SESENTA','SETENTA','OCHENTA','NOVENTA');
$centena = array ('CIENTO','DOSCIENTOS','TRESCIENTOS','CUATROCIENTOS','QUINIENTOS','SEISCIENTOS','SETECIENTOS','OCHOCIENTOS','NOVECIENTOS');
$resto=$todos;
for ($i=1; $i<=$grupos; $i++) {
// Hacemos el grupo
if ($resto>=3) {
$corte=3; } else {
$corte=$resto;
}
$offset=(($i*3)-3)+$corte;
$offset=$offset*(-1);
// la siguiente seccion es una adaptacion de la contribucion de cofyman y JavierB
$num=implode("",array_slice ($digitos,$offset,$corte));
$resultado[$i] = "";
$cen = (int) ($num / 100); //Cifra de las centenas
$doble = $num - ($cen*100); //Cifras de las decenas y unidades
$dec = (int)($num / 10) - ($cen*10); //Cifra de las decenas
$uni = $num - ($dec*10) - ($cen*100); //Cifra de las unidades
if ($cen > 0) {
if ($num == 100) $resultado[$i] = "CIEN";
else $resultado[$i] = $centena[$cen-1].' ';
}//end if
if ($doble>0) {
if ($doble == 20) {
$resultado[$i] .= " VEINTE";
}elseif (($doble < 16) and ($doble>9)) {
$resultado[$i] .= $decenas[$doble-10];
}else {
$resultado[$i] .=' '. $decena[$dec-1];
}//end if
if ($dec>2 and $uni<>0) $resultado[$i] .=' Y ';
if (($uni>0) and ($doble>15) or ($dec==0)) {
if ($i==1 && $uni == 1) $resultado[$i].="UNO";
elseif ($i==2 && $num == 1) $resultado[$i].="";
else $resultado[$i].=$unidad[$uni-1];
}
}
// Le agregamos la terminacion del grupo
switch ($i) {
case 2:
$resultado[$i].= ($resultado[$i]=="") ? "" : " MIL ";
break;
case 3:
$resultado[$i].= ($num==1) ? " MILLÓN " : " MILLONES ";
break;
}
$resto-=$corte;
}
// Sacamos el resultado (primero invertimos el array)
$resultado_inv= array_reverse($resultado, TRUE);
$final="";
foreach ($resultado_inv as $parte){
$final.=$parte;
}
return $final;
}
?>
Código PHP:
<?php
include ("numeros.inc.php");
$numero=11252;
//$numero="$ 6,125,652.11";
echo numerotexto($numero);
echo "<br>"
//numerotexto($ejemplo2);
?>