Números A Letras

Desarrollo Web, Programación, Scripts Ponlo Acá, Comenta !
Publicado por lopongoaca

Hace algunos días estaba realizando un sistema de información para la compañía en la que trabajo y entre todas las cosas que tenia que hacer este sistemas se incluía el hecho de realizar facturas de venta.

Hace mucho tiempo que no realizaba este típico proceso, por lo cual tuve que hacer memoria de mis clases de Bases De Datos recibidas en la Universidad y recordar que en la mayoría de casos una factura tiene un Encabezado, un Detalle y un Pie o Total.

Al fin pude realizar la factura y su modelo, pero el problema vino cuando me dijeron que el valor de la factura debía estar escrito en letras. Después de mucho tiempo de intentar crear una función que me permitiera esto, decidí buscar en Google y me encontré con esta excelente función que nos permite realizar esto sin ningún problema.

:
  1. <?
  2. /*
  3. @function num2letras ()
  4. @abstract Dado un n?mero lo devuelve escrito.
  5. @param $num number - N?mero a convertir.
  6. @param $fem bool - Forma femenina (true) o no (false).
  7. @param $dec bool - Con decimales (true) o no (false).
  8. @result string - Devuelve el n?mero escrito en letra.
  9. */
  10. function num2letras($num, $fem = false, $dec = true) {
  11. $matuni[2]  = "dos";
  12. $matuni[3]  = "tres";
  13. $matuni[4]  = "cuatro";
  14. $matuni[5]  = "cinco";
  15. $matuni[6]  = "seis";
  16. $matuni[7]  = "siete";
  17. $matuni[8]  = "ocho";
  18. $matuni[9]  = "nueve";
  19. $matuni[10] = "diez";
  20. $matuni[11] = "once";
  21. $matuni[12] = "doce";
  22. $matuni[13] = "trece";
  23. $matuni[14] = "catorce";
  24. $matuni[15] = "quince";
  25. $matuni[16] = "dieciseis";
  26. $matuni[17] = "diecisiete";
  27. $matuni[18] = "dieciocho";
  28. $matuni[19] = "diecinueve";
  29. $matuni[20] = "veinte";
  30. $matunisub[2] = "dos";
  31. $matunisub[3] = "tres";
  32. $matunisub[4] = "cuatro";
  33. $matunisub[5] = "quin";
  34. $matunisub[6] = "seis";
  35. $matunisub[7] = "sete";
  36. $matunisub[8] = "ocho";
  37. $matunisub[9] = "nove";
  38.  
  39. $matdec[2] = "veint";
  40. $matdec[3] = "treinta";
  41. $matdec[4] = "cuarenta";
  42. $matdec[5] = "cincuenta";
  43. $matdec[6] = "sesenta";
  44. $matdec[7] = "setenta";
  45. $matdec[8] = "ochenta";
  46. $matdec[9] = "noventa";
  47. $matsub[3]  = 'mill';
  48. $matsub[5]  = 'bill';
  49. $matsub[7]  = 'mill';
  50. $matsub[9]  = 'trill';
  51. $matsub[11] = 'mill';
  52. $matsub[13] = 'bill';
  53. $matsub[15] = 'mill';
  54. $matmil[4]  = 'millones';
  55. $matmil[6]  = 'billones';
  56. $matmil[7]  = 'de billones';
  57. $matmil[8]  = 'millones de billones';
  58. $matmil[10] = 'trillones';
  59. $matmil[11] = 'de trillones';
  60. $matmil[12] = 'millones de trillones';
  61. $matmil[13] = 'de trillones';
  62. $matmil[14] = 'billones de trillones';
  63. $matmil[15] = 'de billones de trillones';
  64. $matmil[16] = 'millones de billones de trillones';
  65.  
  66. $num = trim((string)@$num);
  67. if ($num[0] == '-') {
  68. $neg = 'menos ';
  69. $num = substr($num, 1);
  70. }else
  71. $neg = '';
  72. while ($num[0] == '0') $num = substr($num, 1);
  73. if ($num[0] &lt;'1' or $num[0]&gt; 9) $num = '0' . $num;
  74. $zeros = true;
  75. $punt = false;
  76. $ent = '';
  77. $fra = '';
  78. for ($c = 0; $c &lt;strlen($num); $c++) {
  79. $n = $num[$c];
  80. if (! (strpos(".,'''", $n) === false)) {
  81. if ($punt) break;
  82. else{
  83. $punt = true;
  84. continue;
  85. }
  86.  
  87. }elseif (! (strpos('0123456789', $n) === false)) {
  88. if ($punt) {
  89. if ($n != '0') $zeros = false;
  90. $fra .= $n;
  91. }else
  92.  
  93. $ent .= $n;
  94. }else
  95. <p align="justify">break;</p>
  96. }
  97. $ent = '     ' . $ent;
  98. if ($dec and $fra and ! $zeros) {
  99. $fin = ' coma';
  100. for ($n = 0; $n &lt;strlen($fra); $n++) {
  101. if (($s = $fra[$n]) == '0')
  102. $fin .= ' cero';
  103. elseif ($s == '1')
  104. $fin .= $fem ? ' una' : ' un';
  105. else
  106. $fin .= ' ' . $matuni[$s];
  107. }
  108. }else
  109. $fin = '';
  110. if ((int)$ent === 0) return 'Cero ' . $fin;
  111. $tex = '';
  112. $sub = 0;
  113. $mils = 0;
  114. $neutro = false;
  115. while ( ($num = substr($ent, -3)) != '   ') {
  116. $ent = substr($ent, 0, -3);
  117. if (++$sub &lt;3 and $fem) {
  118. $matuni[1] = 'una';
  119. $subcent = 'as';
  120. }else{
  121. $matuni[1] = $neutro ? 'un' : 'uno';
  122. $subcent = 'os';
  123. }
  124. $t = '';
  125. $n2 = substr($num, 1);
  126. if ($n2 == '00') {
  127. }elseif ($n2 &lt;21)
  128. $t = ' ' . $matuni[(int)$n2];
  129. elseif ($n2 &lt;30) {
  130. $n3 = $num[2];
  131. if ($n3 != 0) $t = 'i' . $matuni[$n3];
  132. $n2 = $num[1];
  133. $t = ' ' . $matdec[$n2] . $t;
  134. }else{
  135. $n3 = $num[2];
  136. if ($n3 != 0) $t = ' y ' . $matuni[$n3];
  137. $n2 = $num[1];
  138. $t = ' ' . $matdec[$n2] . $t;
  139. }
  140. $n = $num[0];
  141. if ($n == 1) {
  142. if ($n2 &lt;&gt; '00') {
  143. $t = ' ciento' . $t;
  144. } else {
  145. $t = ' cien' . $t;
  146. }
  147. }elseif ($n == 5){
  148. $t = ' ciento' . $t;
  149. }elseif ($n == 5){
  150. $t = ' ' . $matunisub[$n] . 'ient' . $subcent . $t;
  151. }elseif ($n != 0){
  152. $t = ' ' . $matunisub[$n] . 'cient' . $subcent . $t;
  153. }
  154. if ($sub == 1) {
  155. }elseif (! isset($matsub[$sub])) {
  156. if ($num == 1) {
  157. $t = ' mil';
  158. }elseif ($num&gt; 1){
  159. $t .= ' mil';
  160. }
  161. }elseif ($num == 1) {
  162. $t .= ' ' . $matsub[$sub] . 'ón';
  163. }elseif ($num&gt; 1){
  164. $t .= ' ' . $matsub[$sub] . 'ones';
  165. }
  166. if ($num == '000') $mils ++;
  167. elseif ($mils != 0) {
  168. if (isset($matmil[$sub])) $t .= ' ' . $matmil[$sub];
  169. $mils = 0;
  170. }
  171. $neutro = true;
  172. $tex = $t . $tex;
  173. }
  174. $tex = $neg . substr($tex, 1) . $fin;
  175. return ucfirst($tex);
  176. }
  177. ?>

Para llamar a la función sencillamente incluimos el archivo donde tenemos y la funcion y la llamos asi:

:
  1. <?
  2. include 'numero2letras.';
  3. echo num2letras(1500);
  4. ?>

Aca pongo el demo (un poco mejorado) y el archivo para descargar la función y el demo.

Enlace Script Original

Etiquetas: , ,

Entradas relacionadas

3 Respuestas para “Números A Letras”

  1. Gerente Lo Puso Acá, asi:

    esto se puede hacer en Excel, por ejemplo?

  2. lopongoaca Lo Puso Acá, asi:

    Existe una forma de hacerlo en Excel pero creando un modulo especial con el codigo necesario en VisualBasic. En esta dirección tienes un ejemplo.

  3. Gerente Lo Puso Acá, asi:

    Muchas gracias, es que me aburrí de la pagadera de cheques dañados por culpa de las diferencias entre números y letras cuando hacemos los cheques en Excel, mi secretaria se mama al menos un cheque diario.

Ponlo Acá, Comenta !


Cerrar
Enviar por Correo