De número a texto en PHP

Recientemente me pidieron ayuda con una función que convirtiera un número a cadena de texto para poder mostrar cantidades con letra, decidí hacer un script rápido en PHP que a continuación muestro, el código funciona para números de dos dígitos, es decir, de 0 a 99 :).

function numero_a_texto( $numero ) {
 
	// Números "únicos"
	$sUnidades[ 0 ] = "cero";
	$sUnidades[ 1 ] = "uno";
	$sUnidades[ 2 ] = "dos";
	$sUnidades[ 3 ] = "tres";
	$sUnidades[ 4 ] = "cuatro";
	$sUnidades[ 5 ] = "cinco";
	$sUnidades[ 6 ] = "seis";
	$sUnidades[ 7 ] = "siete";
	$sUnidades[ 8 ] = "ocho";
	$sUnidades[ 9 ] = "nueve";
	$sUnidades[ 10 ] = "diez";
	$sUnidades[ 11 ] = "once";
	$sUnidades[ 12 ] = "doce";
	$sUnidades[ 13 ] = "trece";
	$sUnidades[ 14 ] = "catorce";
	$sUnidades[ 15 ] = "quince";
	$sUnidades[ 16 ] = "dieciseis";
	$sUnidades[ 17 ] = "diecisiete";
	$sUnidades[ 18 ] = "dieciocho";
	$sUnidades[ 19 ] = "diecinueve";
 
	// Decenas (1 y 2 no son necesarios)
	$sDecenas[ 3 ] = "treinta";
	$sDecenas[ 4 ] = "cuarenta";
	$sDecenas[ 5 ] = "cincuenta";
	$sDecenas[ 6 ] = "sesenta";
	$sDecenas[ 7 ] = "setenta";
	$sDecenas[ 8 ] = "ochenta";
	$sDecenas[ 9 ] = "noventa";
 
	// Calcula decenas y unidades
	$decenas = $numero / 10;
	$unidades = $numero % 10;
 
	// Números menores que 20
	if ( $numero < 20 ) {
		$texto = $sUnidades[ $numero ];
	}
	// El veinte
	else if ( $numero == 20 ) {
		$texto = "veinte";
	}
	// De 21 a 29
	else if ( $numero < 30 ) {
		$texto = "veinti{$sUnidades[ $unidades ]}";
	}
	// de 30 a 99
	else if (  $numero < 100 ) {
		$texto = "{$sDecenas[ $decenas ]}";
		if  ( $unidades != 0 )
			$texto = $texto ." y {$sUnidades[ $unidades ]}";
	}
	else {
		$texto = "[ERROR]";
	}
 
	return $texto;
}

El código de prueba:

echo "<table>\n";
for ( $i = 0; $i < 100; $i++ ) {
    echo "<tr><td>$i</td><td>". numero_a_texto( $i ) ."</td></tr>\n";
}
echo "</table>\n";

Y la salida:

0	cero
1 uno
2 dos
3 tres
4 cuatro
5 cinco
6 seis
7 siete
8 ocho
9 nueve
10 diez
11 once
12 doce
13 trece
14 catorce
15 quince
16 dieciseis
17 diecisiete
18 dieciocho
19 diecinueve
20 veinte
21 veintiuno
22 veintidos
23 veintitres
24 veinticuatro
25 veinticinco
26 veintiseis
27 veintisiete
28 veintiocho
29 veintinueve
30 treinta
31 treinta y uno
32 treinta y dos
33 treinta y tres
34 treinta y cuatro
35 treinta y cinco
36 treinta y seis
37 treinta y siete
38 treinta y ocho
39 treinta y nueve
40 cuarenta
41 cuarenta y uno
42 cuarenta y dos
43 cuarenta y tres
44 cuarenta y cuatro
45 cuarenta y cinco
46 cuarenta y seis
47 cuarenta y siete
48 cuarenta y ocho
49 cuarenta y nueve
50 cincuenta
51 cincuenta y uno
52 cincuenta y dos
53 cincuenta y tres
54 cincuenta y cuatro
5

Leave a Reply