Last active
November 20, 2025 21:28
-
-
Save arnoldobr/7487700 to your computer and use it in GitHub Desktop.
Convierte números en texto.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| function letras($n){ | |
| $cent = ['', 'ciento', 'doscientos', 'trescientos', 'cuatrocientos', 'quinientos', 'seiscientos', | |
| 'setecientos', 'ochocientos', 'novecientos']; | |
| $dec = [ '', '', '', 'treinta', 'cuarenta', 'cincuenta', 'sesenta', 'setenta', 'ochenta', 'noventa' ]; | |
| $uni = [ '', ' y uno', ' y dos', ' y tres', ' y cuatro', ' y cinco', ' y seis', ' y siete', ' y ocho', ' y nueve']; | |
| // Generar números del 0 al 99 | |
| for ($i = 0; $i < 100; $i++){ | |
| $num[$i] = $dec[intdiv($i, 10)] . $uni[$i % 10]; | |
| } | |
| // Casos especiales | |
| $num[0] = ''; | |
| $num[1] = 'uno'; | |
| $num[2] = 'dos'; | |
| $num[3] = 'tres'; | |
| $num[4] = 'cuatro'; | |
| $num[5] = 'cinco'; | |
| $num[6] = 'seis'; | |
| $num[7] = 'siete'; | |
| $num[8] = 'ocho'; | |
| $num[9] = 'nueve'; | |
| $num[10] = 'diez'; | |
| $num[11] = 'once'; | |
| $num[12] = 'doce'; | |
| $num[13] = 'trece'; | |
| $num[14] = 'catorce'; | |
| $num[15] = 'quince'; | |
| $num[16] = 'dieciséis'; | |
| $num[17] = 'diecisiete'; | |
| $num[18] = 'dieciocho'; | |
| $num[19] = 'diecinueve'; | |
| $num[20] = 'veinte'; | |
| $num[21] = 'veintiuno'; | |
| $num[22] = 'veintidós'; | |
| $num[23] = 'veintitrés'; | |
| $num[24] = 'veinticuatro'; | |
| $num[25] = 'veinticinco'; | |
| $num[26] = 'veintiséis'; | |
| $num[27] = 'veintisiete'; | |
| $num[28] = 'veintiocho'; | |
| $num[29] = 'veintinueve'; | |
| $num[30] = 'treinta'; | |
| $num[40] = 'cuarenta'; | |
| $num[50] = 'cincuenta'; | |
| $num[60] = 'sesenta'; | |
| $num[70] = 'setenta'; | |
| $num[80] = 'ochenta'; | |
| $num[90] = 'noventa'; | |
| $num[100] = 'cien'; | |
| if ($n <= 100) { | |
| return $num[$n]; | |
| } else if($n < 1000) { | |
| $c = intdiv($n, 100); | |
| $resto = $n % 100; | |
| if ($resto == 0) { | |
| return $cent[$c]; | |
| } | |
| return trim($cent[$c] . ' ' . letras($resto)); | |
| } else if ($n < 1000000) { | |
| $c = intdiv($n, 1000); | |
| $resto = $n % 1000; | |
| $p = letras($c); | |
| if ($p == 'uno') { | |
| $p = 'un'; | |
| } | |
| if ($resto == 0) { | |
| return trim("$p mil"); | |
| } | |
| return trim("$p mil " . letras($resto)); | |
| } else { | |
| $c = intdiv($n, 1000000); | |
| $resto = $n % 1000000; | |
| $p = letras($c); | |
| $q = ($p == 'uno') ? 'un millón' : "$p millones"; | |
| if ($resto == 0) { | |
| return trim($q); | |
| } | |
| return trim("$q " . letras($resto)); | |
| } | |
| } | |
| function letras2($monto){ | |
| $cant = explode('.', $monto); | |
| $v1 = ($cant[0] == 0) ? 'cero' : letras($cant[0]); | |
| $v2 = isset($cant[1]) ? $cant[1] : '00'; | |
| $v2 = str_pad(substr($v2, 0, 2), 2, '0', STR_PAD_RIGHT); | |
| return $v1 . ' con ' . $v2 . '/100'; | |
| } | |
| // Ejemplos de uso | |
| echo letras(1) . "\n"; // uno | |
| echo letras(21) . "\n"; // veintiuno | |
| echo letras(100) . "\n"; // cien | |
| echo letras(105) . "\n"; // ciento cinco | |
| echo letras(1000) . "\n"; // un mil | |
| echo letras(1500) . "\n"; // un mil quinientos | |
| echo letras(1000000) . "\n"; // un millón | |
| echo letras(2500000) . "\n"; // dos millones quinientos mil | |
| echo "\n"; | |
| echo letras2("1234.56") . "\n"; // un mil doscientos treinta y cuatro con 56/100 | |
| echo letras2("100.00") . "\n"; // cien con 00/100 | |
| echo letras2("0.99") . "\n"; // cero con 99/100 | |
| ?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment