Skip to content

Instantly share code, notes, and snippets.

@arnoldobr
Last active November 20, 2025 21:28
Show Gist options
  • Select an option

  • Save arnoldobr/7487700 to your computer and use it in GitHub Desktop.

Select an option

Save arnoldobr/7487700 to your computer and use it in GitHub Desktop.
Convierte números en texto.
<?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