Foros del Web » Programando para Internet » PHP »

[APORTE] Funcion para convertir numeros a letras

Estas en el tema de [APORTE] Funcion para convertir numeros a letras en el foro de PHP en Foros del Web. Hola a Todos publico esta pequeña funcion para todos aquellos que necesiten de una funcion para poder convertir numeros a letras, en este caso lo ...
  #1 (permalink)  
Antiguo 08/05/2009, 12:33
Avatar de ginitofl  
Fecha de Ingreso: diciembre-2006
Ubicación: Lima Perú
Mensajes: 349
Antigüedad: 17 años, 4 meses
Puntos: 22
[APORTE] Funcion para convertir numeros a letras

Hola a Todos publico esta pequeña funcion para todos aquellos que necesiten de una funcion para poder convertir numeros a letras, en este caso lo hice para la moneda de Peru (Nuevo Sol), espero sus apreciaciones y tambien si hay que mejorar o cambiar algo. por ahora convierte numeros de 1 a 999999999.99, bueno la funcion es esta lo guardo como cantidadenletras.php:

Código PHP:
<?php
function CantidadEnLetra($tyCantidad

$tyCantidad round($tyCantidad 100) / 100;
$lyCantidad = (int)$tyCantidad;
$lyCentavos = ($tyCantidad $lyCantidad) * 100;
$lyCentavos round($lyCentavos 100) / 100;
$laUnidades = Array("UN""DOS""TRES""CUATRO""CINCO""SEIS""SIETE""OCHO""NUEVE""DIEZ""ONCE""DOCE""TRECE""CATORCE""QUINCE""DIECISEIS""DIECISIETE""DIECIOCHO""DIECINUEVE""VEINTE""VEINTIUN""VEINTIDOS""VEINTITRES""VEINTICUATRO""VEINTICINCO""VEINTISEIS""VEINTISIETE""VEINTIOCHO""VEINTINUEVE");
$laDecenas = Array("DIEZ""VEINTE""TREINTA""CUARENTA""CINCUENTA""SESENTA""SETENTA""OCHENTA""NOVENTA");
$laCentenas = Array("CIENTO""DOSCIENTOS""TRESCIENTOS""CUATROCIENTOS""QUINIENTOS""SEISCIENTOS""SETECIENTOS""OCHOCIENTOS""NOVECIENTOS");
$lnNumeroBloques 0;
do
{
    
$lnNumeroBloques++;
    
$lnPrimerDigito 0;
    
$lnSegundoDigito 0;
    
$lnTercerDigito 0;
    
$lcBloque "";
    
$lnBloqueCero 0;
    for(
$i 1$i <= 3$i++)
    {
        
$lnDigito $lyCantidad &#37; 10;
        
if($lnDigito != 0)
        {
            switch(
$i)
            {
                case 
1:
                    
$lcBloque " " $laUnidades[$lnDigito 1];
                    
$lnPrimerDigito $lnDigito;
                    break;
                case 
2:
                    If (
$lnDigito <= 2)
                    {
                        
$lcBloque " " $laUnidades[($lnDigito 10) + $lnPrimerDigito 1];
                    }
                    else
                    {
                        if(
$lnPrimerDigito != 0)
                        {
                        
$y =" Y";
                        }
                        else
                        {
                        
$y=" ";
                        }
                        
                        
$lcBloque " " $laDecenas[$lnDigito 1] . $y $lcBloque;
                    }
                    
$lnSegundoDigito $lnDigito;
                    break;
                case 
3:
                    if(
$lnDigito == and $lnPrimerDigito == and $lnSegundoDigito == 0)
                    {
                        
$cien "CIEN";
                    }
                    else
                    {
                        
$cien $laCentenas[$lnDigito 1];
                    }
                    
$lcBloque " " $cien $lcBloque;
                    
$lnTercerDigito $lnDigito;
                    break;
            }
        }
        else
        {
            
$lnBloqueCero $lnBloqueCero 1;
        }
        
$lyCantidad $lyCantidad 10;
        
$lyCantidad = (int)$lyCantidad;
        If (
$lyCantidad == 0)
        {
            break;
        }
    }
    switch(
$lnNumeroBloques)
    {
        case 
1:
            
$CantidadEnLetra $lcBloque;
            
$CORTALETRA substr($CantidadEnLetra, -2); 
            if (
$CORTALETRA == "UN")
            {
                
$CantidadEnLetra $lcBloque "O";
            }
            break;
        case 
2:
            if (
$lcBloque == " UN")
            {
                if(
$lnBloqueCero != 3)
                {
                
$mil" MIL";
                }
                
$CantidadEnLetra $mil $CantidadEnLetra;
                
$CORTALETRA substr($CantidadEnLetra, -2);
                if (
$CORTALETRA == "UN")
                {
                    
$CantidadEnLetra $lcBloque "O";
                }
            }
            else
            {
                if(
$lnBloqueCero != 3)
                {
                    
$mil=" MIL";
                }
                
$CantidadEnLetra $lcBloque $mil $CantidadEnLetra;
                
$CORTALETRA substr($CantidadEnLetra, -2);
                if (
CORTALETRA == "UN")
                {
                    
$CantidadEnLetra $lcBloque "O";
                }
            }
            break;
        case 
3:
            if(
$lnPrimerDigito == And $lnSegundoDigito == And $lnTercerDigito == 0)
            {
            
$millon" MILLON";
            }
            else
            {
            
$millon" MILLONES";
            }
            
$CantidadEnLetra $lcBloque $millon $CantidadEnLetra;
            
$CORTALETRA substr($CantidadEnLetra, -2);
            if (
$CORTALETRA == "UN")
            {
                
$CantidadEnLetra $lcBloque "O";
            }
            break;
        }
}while(
$lyCantidad 0);
$con=" CON ";
$CantidadEnLetra $CantidadEnLetra $con $lyCentavos "/100 NUEVOS SOLES";
return 
$CantidadEnLetra;
}
//PARA LLAMAR A LA FUNCION
//echo CantidadEnLetra(1289191);
//echo "<br>";
//CantidadEnLetra(999999999.99);
?>
Saludos.

Última edición por ginitofl; 08/05/2009 a las 22:52 Razón: Ajustar Detalles
  #2 (permalink)  
Antiguo 08/05/2009, 18:35
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: [APORTE] Funcion para convertir numeros a letras

interesante...

__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 08/05/2009, 20:47
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 18 años
Puntos: 33
Respuesta: [APORTE] Funcion para convertir numeros a letras

ginitofl:

Muy interesante tu aporte.

Comentarios ->

En el case 2 del switch hay un CORTALETRA que
requiere del $ para variables.

Lo he corrido utilizando un for(...) y manipulando los numeros
y hasta los 14 resultados todo bien.
A partir de los 14 bucles con 14 numeros diferentes empieza
a tirarme un NOTICE algo asi ;

Notice: Undefined offset: -4 in C:\Apache\Apache2\htdocs\FuncionFile()\numeroletra .php on line 28

Notice: Undefined offset: -54 in C:\Apache\Apache2\htdocs\FuncionFile()\numeroletra .php on line 34

Notice: Undefined offset: -10 in C:\Apache\Apache2\htdocs\FuncionFile()\numeroletra .php on line 53

(OJO) Los resultados finales si salen correctamente.
Recuerda quel NOTICE no evita que el codigo continua solo avisa
que hay algo malo en ese nivel.
Es recomendable que lo refines.
Y mis mas sinceras felicitaciones por el aporte y sin duda alguna
podemos hacer infinidad de tareas con php.

Saludos
Franco

P.S. Utilice algo asi ->

<?php
require("numeroletra.php");
$z = 1234;
for($w = 0; $w < 24; $w++) {
$final = CantidadEnLetra($z);
echo "$final<br>";
$z = $z * 2 + 25;
}
?>
  #4 (permalink)  
Antiguo 08/05/2009, 23:00
Avatar de ginitofl  
Fecha de Ingreso: diciembre-2006
Ubicación: Lima Perú
Mensajes: 349
Antigüedad: 17 años, 4 meses
Puntos: 22
Respuesta: [APORTE] Funcion para convertir numeros a letras

Hola Franco gracias por probar y ver los errores que tiene la funcion. Corregi algunos pequeños detalles en la funcion y he probado con el codigo que planteas y me sale sin problemas, cabe recordar que la funcion solo acepta de 1 a 999999999.99 y en el codigo que planteas veran que desde la linea 21 en adelante no saldra correctamente.

dejo tu ejemplo para que noten lo que digo.

Código PHP:
<html>
<head>
<style type="text/css">
<!--
.Estilo5 {font-size: 12px}
-->
</style>
</head>
<body>
<table width="977" border="1">
<?php
require("cantidadenletras.php");
$z 1234;
for(
$w 0$w 24$w++)
{
    
$final CantidadEnLetra($z);
?>
    <tr>
      <td width="95"><? echo $z;?></td>
        <td width="866"><span class="Estilo5"><? echo $final;?></span></td>
    </tr>
<?php
$z 
$z 20;
}
?>  
</table>
</body>
</html>
Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:02.