Bienvenido a Tecnohackers

Tecnohackers » Programacion » Programacion Webmaster » Scripts Pre-Fabricados (Moderador: Zentraedi)
 » 

[PHP]Convertir números a letras



Autor Tema: [PHP]Convertir números a letras  (Leído 2761 veces)

Desconectado dangus92

  • Asiduo
  • *
  • Mensajes: 72
  • ::..Informática a full..::
[PHP]Convertir números a letras
« en: Noviembre 04, 2009, 12:14:34 am »
Buenas a todos, estoy iniciandome en la programación en PHP a nivel web, me encontre un script que sirve para convertir números a letras y lo adapte para que sea sencillo de utilizarlo. No hice mucho, es que estoy empezando, pero lo posteo por si alguien quiera utilizar o le sirva ese script. El script lo saque de You are not allowed to view links. Register or Login no tiene autor.

Consta de 3 partes.

Index.php
Código: You are not allowed to view links. Register or Login
<html>
  <head>
  <title>..::Dangus::..</title>
  </head>
  <body>
  <center><h2><p> Ingrese los datos que desea convertir </p></h2></center>
<form method="post" action="convertir.php">
  <center>Ingrese los Números: </center>
  <br />
  <input type="text" name="one">
 <br />
  <input type="text" name="two">
 <br />
  <input type="text" name="tree">
<br />
  <input type="text" name="four">
<br />
  <input type="text" name="five">
  <br />
  <br />
  <input type="submit" value="Convertir">
 
  <center><h5><p> Creado exclusivamente para OTN_TeaM </p></h5></center>
  </form>
 
 
</body>
</noscript>
<div style="text-align: center;"><div style="position:relative; top:0; margin-right:auto;margin-left:auto; z-index:99999">
<! -- no ads -->
</div></div>
</html>
convertir.php
Código: You are not allowed to view links. Register or Login
<html>
<head>
<title>Conversor de Numeros a letras</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>

<?php
require("letras.php");
  
$d=$_REQUEST[&#39;one&#39;];
   
$da=$_REQUEST[&#39;two&#39;];
    
$dan=$_REQUEST[&#39;tree&#39;];
     
$dani=$_REQUEST[&#39;four&#39;];
      
$daniel=$_REQUEST[&#39;five&#39;];
      
echo "El número ingresado es: "
  echo 
"$d";
$dangus=new NumerosALetras();
  echo 
"
"
.&#39;&#39;.$dangus->traducir($d);
  
echo "
"

  echo 
"
"
;//Numero uno
  
echo "El número ingresado es: "
  echo 
"$da";
$dangus=new NumerosALetras();
  echo 
"
"
.&#39;&#39;.$dangus->traducir($da);
  
echo "
"

  echo 
"
"
;//Numero dos
  
echo "El número ingresado es: "
  echo 
"$dan";
$dangus=new NumerosALetras();
  echo 
"
"
.&#39;&#39;.$dangus->traducir($dan);
  
echo "
"
;
  echo 
"
"
//Numero tres
  
echo "El número ingresado es: "
  echo 
"$dani";
$dangus=new NumerosALetras();
  echo 
"
"
.&#39;&#39;.$dangus->traducir($dani);
  
echo "
"
;
  echo 
"
"
//Numero cuatro
  
echo "El número ingresado es: "
  echo 
"$daniel";
$dangus=new NumerosALetras();
  echo 
"
"
.&#39;&#39;.$dangus->traducir($daniel);
  
echo "
"
;
  echo 
"
"
//Numero cinco

 
?>


</body>
</noscript>
<div style="text-align: center;"><div style="position:relative; top:0; margin-right:auto;margin-left:auto; z-index:99999">
<! -- no ads -->
</div></div>
</html>
Y el principal de todos, este es el script que hace todo.

letras.php
Código: You are not allowed to view links. Register or Login
<?php
class NumerosALetras {

  public function 
traducir($num)
  {
    
$partes=explode(&#39;.&#39;,$num);
    
$s=$partes[0];
    if (
strlen($s)>12)
      die(&
#39;Hasta 12 dígitos&#39;);
    
$entera=$this->traduccionParcial($s);
    if (
count($partes)>1)
    {
      
$entera=$entera.&#39; con &#39;.$partes[1];
    
}
    return 
ucfirst($entera);
  }     

  private function 
traduccionParcial($s)
  {
    
settype($s,&#39;string&#39;);    
    
$faltan=strlen($s) % 3;
    
$cad=&#39;&#39;;
    
if ($faltan!=0)
      
$faltan=3-$faltan;
    for(
$f=1;$f<=$faltan;$f++)
    {
      
$cad.=&#39;0&#39;;
    
}
    
$s=$cad.$s;
    if (
strlen($s)<=&& $s[0]==&& $s[1]==&& $s[2]==0)
      
$resu=&#39;cero&#39;;
    
else
    {  
      
$cad1=substr($s,strlen($s)-3,3);
      
$resu=$this->convertir($cad1);
    }
    if (
strlen($s)>3)
    {
      
$resu2=&#39;&#39;;
      
$cad2=substr($s,strlen($s)-6,3);
      if (
$cad2[0]==&& $cad2[1]==&& $cad2[2] ==1)
    
$resu2=&#39;mil &#39;;
      
else     
        if (
$cad2[0]!=|| $cad2[1]!=|| $cad2[2] !=0)
          
$resu2=$this->convertir($cad2,2).&#39;mil &#39;;
      
$resu=$resu2.$resu;            
    }
    if (
strlen($s)>6)
    {
      
$resu2=&#39;&#39;;
      
$cad3=substr($s,strlen($s)-9,3);
      if (
$cad3[0]==&#39;0&#39; && $cad3[1]==&#39;0&#39; && $cad3[2]==1)
    
$resu2=&#39;un millón &#39;;
      
else    
      if (
$cad3[0]!=|| $cad3[1]!=|| $cad3[2] !=0)
          
$resu2=$this->convertir($cad3,2).&#39;millones &#39;;
      
$resu=$resu2.$resu;       
    }

    if (
strlen($s)>9)
    {
      
$resu2=&#39;&#39;;
      
$cad4=substr($s,strlen($s)-12,3);

      if (
$cad4[0]==&#39;0&#39; && $cad4[1]==&#39;0&#39; && $cad4[2]==1)
      
{
    if (
$cad3[0]==&& $cad3[1]==&& $cad3[2]==0)
      
$resu2=&#39;mil millones &#39;;
    
else
      
$resu2=&#39;mil &#39;;
      
}    
      else    
    
$resu2=$this->convertir($cad4,2).&#39;mil millones &#39;;        
      
$resu=$resu2.$resu;       
    }
    return 
trim($resu);
  }

  private function 
convertir($num,$ind=1)
  {
    
$cad=&#39;&#39;;
    
if ($num[0]==&& $num[1]==&& $num[2]==0)
    {
       return &
#39;cien &#39;;
    
}
    switch (
$num[0]){
             case 
1:$cad.=&#39;ciento &#39;;break;
         
case 2:$cad.=&#39;doscientos &#39;;break;
         
case 3:$cad.=&#39;trescientos &#39;;break;
         
case 4:$cad.=&#39;cuatrocientos &#39;;break;
         
case 5:$cad.=&#39;quinientos &#39;;break;
         
case 6:$cad.=&#39;seiscientos &#39;;break;
         
case 7:$cad.=&#39;setecientos &#39;;break;
         
case 8:$cad.=&#39;ochocientos &#39;;break;
         
case 9:$cad.=&#39;novecientos &#39;;break;    
    
}  
    switch (
$num[1]) {
        case 
3:$cad.=&#39;treinta &#39;;break;
        
case 4:$cad.=&#39;cuarenta &#39;;break;
        
case 5:$cad.=&#39;cincuenta &#39;;break;
        
case 6:$cad.=&#39;sesenta &#39;;break;
        
case 7:$cad.=&#39;setenta &#39;;break;
        
case 8:$cad.=&#39;ochenta &#39;;break;
        
case 9:$cad.=&#39;noventa &#39;;break;        
    
}
    if (
$num[2]>=&& $num[1]==1)
    {
      switch (
$num[1].$num[2]) {
            case 
10:$cad.=&#39;diez &#39;;break;
            
case 11:$cad.=&#39;once &#39;;break;
        
case 12:$cad.=&#39;doce &#39;;break;
        
case 13:$cad.=&#39;trece &#39;;break;
        
case 14:$cad.=&#39;catorce &#39;;break;
        
case 15:$cad.=&#39;quince &#39;;break;
        
case 16:$cad.=&#39;dieciseis &#39;;break;
        
case 17:$cad.=&#39;diecisiete &#39;;break;
        
case 18:$cad.=&#39;dieciocho &#39;;break;
        
case 19:$cad.=&#39;diecinueve &#39;;break;
      
}
      return 
$cad;
    }
    if (
$num[2]>=&& $num[1]==2)
    {
      switch (
$num[1].$num[2]) {
        case 
20:$cad.=&#39;veinte &#39;;break;  
        
case 21:if ($ind==1$cad.=&#39;veintiuno &#39;; else $cad.=&#39;veintiun &#39;;break;
        
case 22:$cad.=&#39;veintidos &#39;;break;
        
case 23:$cad.=&#39;veintitrés &#39;;break;
        
case 24:$cad.=&#39;veinticuatro &#39;;break;
        
case 25:$cad.=&#39;veinticinco &#39;;break;
        
case 26:$cad.=&#39;veintiseis &#39;;break;
        
case 27:$cad.=&#39;veintisiete &#39;;break;
        
case 28:$cad.=&#39;veintiocho &#39;;break;
        
case 29:$cad.=&#39;veintinueve &#39;;break;

      
}
      return 
$cad;
    }
    if (
$num[2]!=&& $num[1]!=0)
    {
      if (
$num[0]>|| $num[1]>0)
    
$cad.=&#39;y &#39;;
    
}
    if (
$num[1]!=1)
    {
      switch (
$num[2]) {
            case 
1:if ($ind==1$cad.=&#39;uno &#39;;else $cad.=&#39;un &#39;;break;
        
case 2:$cad.=&#39;dos &#39;;break;
        
case 3:$cad.=&#39;tres &#39;;break;
        
case 4:$cad.=&#39;cuatro &#39;;break;
        
case 5:$cad.=&#39;cinco &#39;;break;
        
case 6:$cad.=&#39;seis &#39;;break;
        
case 7:$cad.=&#39;siete &#39;;break;
        
case 8:$cad.=&#39;ocho &#39;;break;
        
case 9:$cad.=&#39;nueve &#39;;break;        
      
}
    }      
    return 
$cad;  
  }  
}
?>

Aqui les dejo una web de muestra.. You are not allowed to view links. Register or Login
Un saludo a la comunidad.:tea:
« Última modificación: Abril 25, 2010, 11:59:45 pm por dyb »

silencio

  • Visitante
Respuesta: [PHP]Convertir números a letras
« Respuesta #1 en: Noviembre 04, 2009, 01:22:05 am »
Esta muy bien pero se puede mejorar mira esto..


45687987534.31

Resultado

Cuarenta y cinco mil millones seiscientos ochenta y siete millones novecientos ochenta y siete mil quinientos treinta y cuatro con 31


Después del punto.


Nos vemos
« Última modificación: Abril 26, 2010, 12:01:20 am por dyb »

Desconectado dangus92

  • Asiduo
  • *
  • Mensajes: 72
  • ::..Informática a full..::
Respuesta: [PHP]Convertir números a letras
« Respuesta #2 en: Noviembre 04, 2009, 01:52:29 am »
Cita de: silencio;7505
Esta muy bien pero se puede mejorar mira esto..


45687987534.31

Resultado

Cuarenta y cinco mil millones seiscientos ochenta y siete millones novecientos ochenta y siete mil quinientos treinta y cuatro con 31


Después del punto.


Nos vemos
Gracias :) si, básicamente solo convierte los números enteros. Pero dejame adentrarme mas a la progrmación PHP y lo mejoraré :tea:
« Última modificación: Abril 26, 2010, 12:00:49 am por dyb »

Tags:
Tags:

 


SMF 2.0.19 | SMF © 2016, Simple Machines
Paginas Afiliadas
Twitter - FaceBook - Daraxblog
Designed by Smf Personal