On Sat, May 26, 2007 at 10:35:56AM -0300, Lautaro Bonetto wrote:
> Hola a todos.
>
> Convertí una función de VBScript que encontré y andaba necesitando, a
> Ruby.
> Se las comparto a ustedes por si alguien en algún momento necesita de lo
> mismo.
> Básicamente es una función que calcula el CUIT/CUIL de una persona, en
> base
> al nro de DNI y al sexo de ella.
> Seguramente se le puede mejorar algo el código... pero está funcionando
> bien. La misma función en VBS ocupaba más del doble de lineas de código.
Un comentario nomás...
> class Impositivo
> def generar_cuit(sexo, nro_dni)
> dniStc = nro_dni.to_s.rjust 8, "0"
> xyStc = 30
> xyStc = 27 if sexo == "f"
> xyStc = 20 if sexo == "m"
> cDocum = xyStc.to_s + dniStc
> matriz = [5,4,3,2,7,6,5,4,3,2]
> xx = 0
> 10.times do |t|
> xx += cDocum[t].chr.to_i * matriz[t]
> end
> n = 11 - xx % 11
> if n == 10
> if (xyStc == 20 or xyStc == 27 or xyStc == 24)
^^^^^^^^^^^^^^^
¿Tiene sentido eso? Ya no recuerdo el algoritmo así que no te voy a
hacer una corrección del mismo, peero ese or, por lo que escribiste acá
creo que no tiene sentido. xyStc puede ser 30, 27 o 20, pero nunca 24.
Lo comento porque calculo que te olvidaste de ese caso o algo así, y
así lo revisas, ya que como dije no me acuerdo el algoritmo para
calcular el cuil pero me suena que puede empezar con 24.
> xyStc, digitoStc = 23, 9
> else
> xyStc, digitoStc = 33, 9
> end
> digitoStc = 4 if xyStc == 27
> else
> digitoStc = (n == 11) ? 0 : n
> end
> return xyStc.to_s + dniStc + digitoStc.to_s
> end
> end
>
> imp = Impositivo.new
> puts imp.generar_cuit("m", 12123123)
Muy bueno, gracias por compartirlo! Y espero que te sirva la
observación. Y a ver quien se hace unos testcases para esto, que es una
pavada ;-P
--
Damián Viano(Des) ¯ ¯ - _ _ - ¯ ¯
GPG: 0x6EB95A6F Debian ¯-_GNU_-¯ Linux
Web: http://damianv.com.ar/ ¯-¯
_______________________________________________
ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar