Lenguaje PHP

Convertir números enteros a letras en PHP

Convertir números enteros a letras en PHP. Un script muy importante para el desarrollo de nuestros proyectos web, es muy necesario esta función, la función que se presenta a más adelante convierte los números a letras.

Sin embargo, les daré su uso para resultados en escribir el monto de venta en letras, a mí en particular me sucedió, no podía convertir números a letras, con este script que les compartiré logre instalar esa función que me convierte al cargar el navegador.

Convertir números enteros a letras en PHP

Aquí su funcionalidad del código en mención.

  1. El número a convertir  a letras debe ser un entero positivo menor a 999,999, 999,999.
  2. La línea del código 3 declara un array con la representación alfabética de los números comprendidos entre 1 y 29. Esta característica se debe a que dichos números no siguen un diagrama para su escritura.
  3. La línea 11 nos declara un arreglo que contiene la conversión de los números 30, 40 … y 90.
  4.   La línea del código 14 obtiene el módulo 10 de n.
  5. Si el módulo del código 10 de n es cero se regresa la posición asociada a n en el vector decenas(línea 11).
  6. Si el módulo del código 10 de n es diferente de cero. Se regresa la posición asociada a n en el vector decenas y se hace un llamado a la función básico.
  7. La línea del código 21 declara un arreglo para la representación alfabética de los números 100,200, … y 900.
  8. La línea del código  30 hace uso de un operador ternario para poder manejar la escritura de los números comprendidos entre 101 y 199.
  9. En la línea del código  39 se obtiene la longitud de n. En el caso de los miles está longitud varía entre 4 y 6.
    substr($cadena, -3) obtiene los últimos 3 caracteres de la cadena, línea 41.

Función PHP:

<?php
function basico($numero) {
$valor = array ('uno','dos','tres','cuatro','cinco','seis','siete','ocho',
'nueve','diez','once','doce','trece','catorce','quince','dieciseis','diecisiete','dieciocho','diecinueve','veinte','veintiuno ','vientidos ','veintitrés ', 'veinticuatro','veinticinco',
'veintiséis','veintisiete','veintiocho','veintinueve');
return $valor[$numero - 1];
}

function decenas($n) {
$decenas = array (30=>'treinta',40=>'cuarenta',50=>'cincuenta',60=>'sesenta',
70=>'setenta',80=>'ochenta',90=>'noventa');
if( $n <= 29) return basico($n);
$x = $n % 10;
if ( $x == 0 ) {
return $decenas[$n];
} else return $decenas[$n - $x].' y '. basico($x);
}

function centenas($n) {
$cientos = array (100 =>'cien',200 =>'doscientos',300=>'trecientos',
400=>'cuatrocientos', 500=>'quinientos',600=>'seiscientos',
700=>'setecientos',800=>'ochocientos', 900 =>'novecientos');
if( $n >= 100) {
if ( $n % 100 == 0 ) {
return $cientos[$n];
} else {
$u = (int) substr($n,0,1);
$d = (int) substr($n,1,2);
return (($u == 1)?'ciento':$cientos[$u*100]).' '.decenas($d);
}
} else return decenas($n);
}

function miles($n) {
if($n > 999) {
if( $n == 1000) {return 'mil';}
else {
$l = strlen($n);
$c = (int)substr($n,0,$l-3);
$x = (int)substr($n,-3);
if($c == 1) {$cadena = 'mil '.centenas($x);}
else if($x != 0) {$cadena = centenas($c).' mil '.centenas($x);}
else $cadena = centenas($c). ' mil';
return $cadena;
}
} else return centenas($n);
}

function millones($n) {
if($n == 1000000) {return 'un millón';}
else {
$l = strlen($n);
$c = (int)substr($n,0,$l-6);
$x = (int)substr($n,-6);
if($c == 1) {
$cadena = ' millón ';
} else {
$cadena = ' millones ';
}
return miles($c).$cadena.(($x > 0)?miles($x):'');
}
}
function convertir($n) {
switch (true) {
case ( $n >= 1 && $n <= 29) : return basico($n); break;
case ( $n >= 30 && $n < 100) : return decenas($n); break;
case ( $n >= 100 && $n < 1000) : return centenas($n); break;
case ($n >= 1000 && $n <= 999999): return miles($n); break;
case ($n >= 1000000): return millones($n);
}
}

$html ='';
if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
$html = "
<p class='centrado'>".$_POST['numero'].' se escribe ';
$html.= '<b>'.ucfirst(convertir($_POST['numero'])).'</b>
';
echo $html;
}
?>
<form action="" method="post">
<input type="text" name="numero">
<button>Enviar</button>
</form>

Formulario HTML

Este formulario envía los números haciendo uso de un formulario con el método post para ser procesados por la función de conversión de números a letras.

<form action="" method="post">
<input type="text" name="numero">
<button>Enviar</button>
</form>

Números a letras con PHP usando Librería [Ejemplo completo]

Conclusión

La opción de convertir de números a letras es muy usado por ejemplo en facturación electrónica, Inventarios, comprobantes de pagos, etc.

En este articulo usaremos funciones PHP para lograr el objetivo deseado.

Quizás esos otros artículos similares les ayude

Convertir números enteros a letras en PHP
Convertir números enteros a letras en PHP

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.

18 comentarios

  1. Hola, lo de ciento uno mil, lo puedes resolver simplemente cambiando en el vector básico el valor (uno) por (un) y el (veinte y uno) por (veintiún) y se ve bien. Nestor yo probé tu código encima de otro que yo tengo donde sumo unos montos y les doy forma_number y me funcionó perfectamente, te felicito y gracias por tu código.

  2. Porfavor a los usuarios y programadores porfavor cuando les salga un error escribanlo en el comentario tal cual les sale para poder ayudarlos, si no me dicen que error sale como los ayudo amigos. Manden un print de la pantalla o escribanlo.

  3. Buenas BaulPHP,

    ¿Podrías decirme como puedo integrar esto creando una caja de texto en la que el usuario inserte un número y se lo devuleva en texto?

    Gracias!

    1. Hola Ignacio

      He actualizado el articulo gracias a su comentario para complementar la información

      <form action="" method="post">
      <input type="text" name="numero">
      <button>Enviar</button>
      </form>

      Si agregas un formulario HTML con un INPUT con el nombre (numero) se podrá ejecutar la función al 100%

      Estaré atento a cualquier otra inquietud

    1. Hola Miguel

      Qué versión de PHP estas usando el script?

      Además, también podria informarme si estan en un servidor de desarrollo o producción para darte una respuesta más concisa.

  4. Hola estimado esta genial tu código pero hay posibilidad de tener la corrección de cuando el valor es mas de un millón o como puedo corregirlo?
    YA me el valor 1200000 me dice uno millón….

    Serian tan amables de indicarme como corregirlo.

  5. esta buenisimo el codigo, solo faltaba solucionar el tema de los un mil, ya que si digitas con el codigo tal cual esta por ejemplo 101000 el resultado sera ciento uno mil y no ciento un mil, lo cual se soluciona muy facil con substr, de resto el codigo esta buenisimo me ayudo mucho gracias.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba