Convertir importe a letras mediante PHP

Convertir importe a letras mediante PHP. En este artículo veremos 2 funciones para lograr el mismo objetivo de cómo convertir números a texto que podemos usarlo en facturación electrónica u otro uso que pudieran darle.

Importante: La función por el momento solo acepta 2 decimales y el formato del número tiene que ser 000.00, así que pueden utilizar number_format() para normalizar la variable antes de pasarla por la función.

¿Cómo transformar números a letras con php?

Su uso es muy sencillo y para utilizarlo, solo descarguen el código y agreguen a su script o hagan un fichero externo a través de un include con la ruta al fichero que pueden descargar

Convertir importe a letras mediante PHP.

A continuación, mostraremos dos formas para lograr nuestro objetivo.

Primera Forma: Función numerosAletras

Uso del script

Lo único que necesitan utilizar es la siguiente instrucción de código. Por lo tanto, solo debemos de imprimir la funcion con la variable numerica para lograr la conversión deseada.

<?php
$vara = "25.50";

echo numerosAletras($vara);
//resultado: Veinticinco pesos 50/100 M.N.
?>

Función numerosAletras

Esta función será la encargada de convertir los importes, total a pagar en texto que es necesario mostrarlo en nuestra facturación electrónica. A continuación. les dejare la función completa.

<?php 
function numerosAletras($num, $fem = false, $dec = true) { 
$matuni[2] = "dos"; 
$matuni[3] = "tres"; 
$matuni[4] = "cuatro"; 
$matuni[5] = "cinco"; 
$matuni[6] = "seis"; 
$matuni[7] = "siete"; 
$matuni[8] = "ocho"; 
$matuni[9] = "nueve"; 
$matuni[10] = "diez"; 
$matuni[11] = "once"; 
$matuni[12] = "doce"; 
$matuni[13] = "trece"; 
$matuni[14] = "catorce"; 
$matuni[15] = "quince"; 
$matuni[16] = "dieciseis"; 
$matuni[17] = "diecisiete"; 
$matuni[18] = "dieciocho"; 
$matuni[19] = "diecinueve"; 
$matuni[20] = "veinte"; 
$matunisub[2] = "dos"; 
$matunisub[3] = "tres"; 
$matunisub[4] = "cuatro"; 
$matunisub[5] = "quin"; 
$matunisub[6] = "seis"; 
$matunisub[7] = "sete"; 
$matunisub[8] = "ocho"; 
$matunisub[9] = "nove";

$matdec[2] = "veint"; 
$matdec[3] = "treinta"; 
$matdec[4] = "cuarenta"; 
$matdec[5] = "cincuenta"; 
$matdec[6] = "sesenta"; 
$matdec[7] = "setenta"; 
$matdec[8] = "ochenta"; 
$matdec[9] = "noventa"; 
$matsub[3] = 'mill'; 
$matsub[5] = 'bill'; 
$matsub[7] = 'mill'; 
$matsub[9] = 'trill'; 
$matsub[11] = 'mill'; 
$matsub[13] = 'bill'; 
$matsub[15] = 'mill'; 
$matmil[4] = 'millones'; 
$matmil[6] = 'billones'; 
$matmil[7] = 'de billones'; 
$matmil[8] = 'millones de billones'; 
$matmil[10] = 'trillones'; 
$matmil[11] = 'de trillones'; 
$matmil[12] = 'millones de trillones'; 
$matmil[13] = 'de trillones'; 
$matmil[14] = 'billones de trillones'; 
$matmil[15] = 'de billones de trillones'; 
$matmil[16] = 'millones de billones de trillones'; 

//Zi hack
$float=explode('.',$num);
$num=$float[0];

$num = trim((string)@$num); 
if ($num[0] == '-') { 
$neg = 'menos '; 
$num = substr($num, 1); 
}else 
$neg = ''; 
while ($num[0] == '0') $num = substr($num, 1); 
if ($num[0] < '1' or $num[0] > 9) $num = '0' . $num; 
$zeros = true; 
$punt = false; 
$ent = ''; 
$fra = ''; 
for ($c = 0; $c < strlen($num); $c++) { 
$n = $num[$c]; 
if (! (strpos(".,'''", $n) === false)) { 
if ($punt) break; 
else{ 
$punt = true; 
continue; 
}

}elseif (! (strpos('0123456789', $n) === false)) { 
if ($punt) { 
if ($n != '0') $zeros = false; 
$fra .= $n; 
}else

$ent .= $n; 
}else

break;

} 
$ent = ' ' . $ent; 
if ($dec and $fra and ! $zeros) { 
$fin = ' coma'; 
for ($n = 0; $n < strlen($fra); $n++) { 
if (($s = $fra[$n]) == '0') 
$fin .= ' cero'; 
elseif ($s == '1') 
$fin .= $fem ? ' una' : ' un'; 
else 
$fin .= ' ' . $matuni[$s]; 
} 
}else 
$fin = ''; 
if ((int)$ent === 0) return 'Cero ' . $fin; 
$tex = ''; 
$sub = 0; 
$mils = 0; 
$neutro = false; 
while ( ($num = substr($ent, -3)) != ' ') { 
$ent = substr($ent, 0, -3); 
if (++$sub < 3 and $fem) { 
$matuni[1] = 'una'; 
$subcent = 'as'; 
}else{ 
$matuni[1] = $neutro ? 'un' : 'uno'; 
$subcent = 'os'; 
} 
$t = ''; 
$n2 = substr($num, 1); 
if ($n2 == '00') { 
}elseif ($n2 < 21) 
$t = ' ' . $matuni[(int)$n2]; 
elseif ($n2 < 30) { 
$n3 = $num[2]; 
if ($n3 != 0) $t = 'i' . $matuni[$n3]; 
$n2 = $num[1]; 
$t = ' ' . $matdec[$n2] . $t; 
}else{ 
$n3 = $num[2]; 
if ($n3 != 0) $t = ' y ' . $matuni[$n3]; 
$n2 = $num[1]; 
$t = ' ' . $matdec[$n2] . $t; 
} 
$n = $num[0]; 
if ($n == 1) { 
$t = ' ciento' . $t; 
}elseif ($n == 5){ 
$t = ' ' . $matunisub[$n] . 'ient' . $subcent . $t; 
}elseif ($n != 0){ 
$t = ' ' . $matunisub[$n] . 'cient' . $subcent . $t; 
} 
if ($sub == 1) { 
}elseif (! isset($matsub[$sub])) { 
if ($num == 1) { 
$t = ' mil'; 
}elseif ($num > 1){ 
$t .= ' mil'; 
} 
}elseif ($num == 1) { 
$t .= ' ' . $matsub[$sub] . '?n'; 
}elseif ($num > 1){ 
$t .= ' ' . $matsub[$sub] . 'ones'; 
} 
if ($num == '000') $mils ++; 
elseif ($mils != 0) { 
if (isset($matmil[$sub])) $t .= ' ' . $matmil[$sub]; 
$mils = 0; 
} 
$neutro = true; 
$tex = $t . $tex; 
} 
$tex = $neg . substr($tex, 1) . $fin; 
//Zi hack --> return ucfirst($tex);
$end_num=ucfirst($tex).' pesos '.$float[1].'/100 M.N.';
return $end_num; 
} 
?>


Segunda Forma: función number_words

El punto principal es pasar los parámetros a la función para un determinado nombre como pesos, centavos y una conjunción como y, con, etc. Veamos la función completa.

function number_words($valor,$desc_moneda, $sep, $desc_decimal) {
$arr = explode(".", $valor);
$entero = $arr[0];
if (isset($arr[1])) {
$decimos = strlen($arr[1]) == 1 ? $arr[1] . '0' : $arr[1];
}

$fmt = new \NumberFormatter('es', \NumberFormatter::SPELLOUT);
if (is_array($arr)) {
$num_word = ($arr[0]>=1000000) ? "{$fmt->format($entero)} de $desc_moneda" : "{$fmt->format($entero)} $desc_moneda";
if (isset($decimos) && $decimos > 0) {
$num_word .= " $sep {$fmt->format($decimos)} $desc_decimal";
}
}
return $num_word;
}

Usabilidad de la función

Solo debemos llamar la función e incorporar la moneda que puede ser una variable o un registro extraído de la base de datos. Aquí algunos ejemplos

echo number_words("10.10","pesos","y","centavos");
echo number_words("10","pesos","y","centavos");
echo number_words("1000000","pesos","y","centavos");
echo number_words("0.25","pesos","y","centavos");
echo number_words("500.35","dólares","con","centavos");

Salida en el navegador

Una vez que ejecutamos el script en el navegador, mostrara lo siguiente

diez pesos y diez centavos
diez pesos
un millón de pesos
cero pesos y veinticinco centavos
quinientos dólares con treinta y cinco centavos

CONCLUSION

Hemos aprendido a usar esta maravillosa función para convertir números de nuestras boletas, facturas, etc. a letras.
Su uso es muy sencillo, solo debemos llamar a función y embeber la variable de la moneda.
Espero que esta breve explicación les ayude en sus proyectos web.

Me fascina la programación en diversos lenguajes y mas aún si son sistemas web o páginas web.

Entradas relacionadas

Integrar Bootstrap 3 Badge Colors

Integrar Bootstrap 3 Badge Colors

En este artículo vamos a integrar colores de fondo en la clase BADGE de Bootstrap 3. Integrar Bootstrap 3 Badge Colors. En el framework Bootstrap 3 por…

5 formar de validar checkbox

5 formar de validar checkbox

5 formar de validar checkbox. Aquí mostrare varias formas de validar checkbox usando jQuery y JavaScript, también usaremos funciones a nivel de formulario. Aquí debéis fijaros que…

Cómo mostrar ocultar DIV usando CHECKBOX

Cómo mostrar ocultar DIV usando CHECKBOX

Cómo mostrar ocultar DIV usando CHECKBOX?. Lo que haremos será trabajar en un div al hacer clic con el mouse usando jQuery, use el método toggle(). Por…

Enviar formulario usando checkbox

Enviar formulario usando checkbox

Enviar formulario usando checkbox. En este articulo veremos una forma de enviar un formulario HTML usando una casilla o varias casillas de verificación (checkbox). Por lo tanto,…

Limpiar Select2 jQuery

Limpiar Select2 jQuery: Ejemplo completo

Limpiar Select2 jQuery. En este articulo aprenderemos a restablecer para mostrar el marcador de posición select2. JQuery Select2 restablece y luego muestra el marcador de posición. Por…

Evitar duplicados al importar MySQL y PHP

Evitar duplicados al importar MySQL y PHP

Evitar duplicados al importar MySQL y PHP. La mayoría de sistemas web o de escritorio trabajan con importación de registros hacia la base de datos para optimizar…

Esta entrada tiene 4 comentarios

  1. Buenos dias, muchas gracias por compartir el código, lo acabo de usar, solo tuve que agregar una validación en el while de la primer forma: Primera Forma: Función numerosAletras, como sigue:
    while( ($num = substr($ent, -3)) != ‘ ‘ && ($num != ») && ($num != false)) {
    porque algunas veces se quedaba ciclado

Deja una respuesta

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