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.
- El número a convertir a letras debe ser un entero positivo menor a 999,999, 999,999.
- 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.
- La línea 11 nos declara un arreglo que contiene la conversión de los números 30, 40 … y 90.
- La línea del código 14 obtiene el módulo 10 de n.
- 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).
- 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.
- La línea del código 21 declara un arreglo para la representación alfabética de los números 100,200, … y 900.
- 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.
- 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>
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
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.
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.
Los decimales?
Hola Arturo
Si deseas con decimales, aquí te presento otro artículo que explico sobre el tema.
https://www.baulphp.com/numeros-a-letras-con-php-usando-libreria-ejemplo-completo/
Saludos cordiales
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!
Hola Ignacio
He actualizado el articulo gracias a su comentario para complementar la información
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
no sirve el codigo me sale un error
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.
Excelente código! muchas gracias
Muchas gracias por l ejercicio , gracias a el pude solucionar el mio.
Bendiciones.
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.
Gracias por aporte. Excelente, me has ahorrado código.
No se si tiene el codigo para corregir lo de uno millon o uno mil
Muchas gracias, fue un gran apoyo y soporte para mi.
Saludos
Muchas Gracias. Excelente aporte.
Saluds
Que bueno que te aya servido Leandro. Gracias por comentar!!
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.
De acuerdo, que bueno que te aya servido el código, saludos cordiales David