Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/07/2013, 08:55
Hidek1
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
De acuerdo Aporte: Números a palabras

Buenas,
De vez en cuando voy a ir dejando por aquí algunas de las funciones que voy haciendo para mi Framework khaus que pienso le pueden servir a más de alguno..

Este método lo hice hace poco ya que me surgió la necesidad para un proyecto..
En realidad es bastante simple.. no toma en cuenta números decimales y sólo llega hasta los billones, pero para un sistema de facturación de una mediana/pequeña empresa es más que suficiente..

Lo desarrollé porque al buscar funciones similares en internet encontré que los algoritmos que usaban y la cantidad de lineas era excesiva para algo que podría ser mucho mas simple.

Dejo el código y el link en github

Código PHP:
<?php
/**
 * Khaus Framework (http://github.com/rhyudek1/khaus)
 *
 * @link http://github.com/rhyudek1/khaus for the canonical source repository
 * @copyright Copyright (c) 2013 rhyudek1. (https://github.com/rhyudek1/khaus)
 * @license https://github.com/rhyudek1/khaus New BSD License
 *
 * @category    Khaus
 * @package     Khaus_Helper
 * @version     3:20130613
 */
class Khaus_Helper_Integer
{
    public static function 
num2word($numero)
    {
        
$positivoNegativo '';
        
$palabraFinal '';
        
$arrayFinal = array();
        
$arrayConjuntos = array(=> 'mil'=> 'millones'13 => 'billones');
        
$arrayPalabras = array(
            array(
'un''dos''tres''cuatro''cinco''seis''siete''ocho''nueve'),
            array(
'diez''veinte''treinta''cuarenta''cincuenta''sesenta''setenta''ochenta''noventa'),
            array(
'ciento''doscientos''trescientos''cuatrocientos''quinientos''seiscientos''setecientos''ochocientos''novecientos'),
        );
        if (
is_numeric($numero)) {
            if (
$numero == 0) {
                
$palabraFinal 'cero';
            } else {
                if (
$numero 0) {
                    
$positivoNegativo 'menos ';
                    
$numero $numero * -1;
                }
                
$numero = (string) $numero;
                for (
$o 0$i strlen($numero) - 1$i >= 0$i--) {
                    
$conector '';
                    
$numeroActual $numero{$i} - 1;
                    
$udc $o++ % 3;
                    if (isset(
$arrayConjuntos[$o])) {
                        
$conector ' ' $arrayConjuntos[$o];
                    }
                    if (
$numeroActual > -1) {
                        if (
$udc == && $numero{$i 1} > 0) {
                            
$conector ' y';
                        }
                        
$arrayFinal[] = $arrayPalabras[$udc][$numeroActual] . $conector;
                    } else {
                        if (!empty(
$conector)) {
                            
$arrayFinal[] = $conector;
                        }
                    }
                }
                
$arrayFinal array_reverse($arrayFinal);
                
$palabraFinal $positivoNegativo implode(' '$arrayFinal);
                
$palabraFinal preg_replace('/ +/'' '$palabraFinal);
                
$reemplazos = array(
                    
'diez y un'       => 'once',
                    
'diez y dos'      => 'doce',
                    
'diez y tres'     => 'trece',
                    
'diez y cuatro'   => 'catorce',
                    
'diez y cinco'    => 'quince',
                    
'diez y seis'     => 'dieciseis',
                    
'diez y siete'    => 'diecisiete',
                    
'diez y ocho'     => 'dieciocho',
                    
'diez y nueve'    => 'diecinueve',
                    
'veinte y un'     => 'veintiun',
                    
'veinte y dos'    => 'veintidos',
                    
'veinte y tres'   => 'veintitres',
                    
'veinte y cuatro' => 'veinticuatro',
                    
'veinte y cinco'  => 'veinticinco',
                    
'veinte y seis'   => 'veintiseis',
                    
'veinte y siete'  => 'veintisiete',
                    
'veinte y ocho'   => 'veintiocho',
                    
'veinte y nueve'  => 'veintinueve',
                    
'ciento mil'      => 'cien mil',
                    
'un millones'     => 'un millon',
                    
'y un millon'     => 'y un millones',
                    
'millones mil'    => 'millones',
                );
                
$palabraFinal str_replace(array_keys($reemplazos), $reemplazos$palabraFinal);
                
$palabraFinal preg_replace('/^un mil[^a-z]/s''mil '$palabraFinal);
                
$palabraFinal preg_replace('/ciento$/s''cien'$palabraFinal);
                
$palabraFinal trim($palabraFinal);
            }
            return 
$palabraFinal;
        }
    }
}
saludos.
__________________
More about me...
~ @rhyudek1
~ Github