Aguante el algoritmo de clipper! :-D On 6/1/07, Alejandro Di Battista <[EMAIL PROTECTED]> wrote:
Demian... El cálculo es el mismo pero un poco mas enredado. > x = 0 > Temp2 = Temp1 > Do While Temp2 % 11 <> 0 > x = x + 1 > Temp2 = Temp1 + x > EndDo > es una tortuosa forma de calcular cuanto falta para que la suma sea multiplo de 11 y equivalente a > x = 11 - Temp2 % 11 Al final compara que el ultimo digito (el digito verificador) sea igual a lo que falta para que sea multiplo de 11 es decir que si sumamos el digito a Temp1 este deveria ser multiplo de 11. O sea.... es el mismo calculo que el algoritmo anterior sin la verificacion de los "prefijos validos" sds On 6/1/07, Demian Pecile <[EMAIL PROTECTED]> wrote: > > Yo tengo un algoritmo hecho en Clipper que tiene mas años que la > injusticia y no esta muy elegante que digamos... > > pero valida tu cuit !!! > > Function IsCuit (numero) > > Temp = numero > x = 0 > > Temp1 = Val(SubStr(Temp, 1, 1)) * 5 + Val(SubStr(Temp, 2, 1)) * 4 + > Val(SubStr(Temp, 4, 1)) * 3 + Val(SubStr(Temp, 5, 1)) * 2 + Val(SubStr(Temp, > 6, 1)) * 7 + Val(SubStr(Temp, 7, 1)) * 6 + Val(SubStr(Temp, 8, 1)) * 5 + > Val(SubStr(Temp, 9, 1)) * 4 + Val(SubStr(Temp, 10, 1)) * 3 + > Val(SubStr(Temp, 11, 1)) * 2 > > Temp2 = Temp1 Do While Temp2 % 11 <> 0 > x = x + 1 > Temp2 = Temp1 + x > EndDo \ > If Alltrim(SubStr(Temp, 13, 1)) <> Alltrim(Str(x)) > Resultado=.F. > Else > Resultado=.T. > EndIf > > Return Resultado > > Si alguno entiende clipper y quiere pasarlo a rubby adelante ... > > salu2 > > Demian > > Cristian Ventura escribió: > > Yo puedo comentar que mi CUIT no valida en esa pagina! > jejeje.... > > yo pido mi cuit, en la afip (por mi dni o nombre y apellido....) > y me da: 24-29332311-5 > y no valida... > > no dejando de ser mi CUIT > > que pasa ante las excepciones esas? :O > > slds, > Cristian. > > > On 6/1/07, Alejandro Di Battista < [EMAIL PROTECTED]> wrote: > > > > Estimados colegas... vamos a las fuentes... > > > > http://seti.afip.gov.ar/padron-puc-constancia-internet/ConsultaConstanciaAction.do > > > > tiene archivo ... ValidaCuit.js que > > > > function esCUITValida(inputValor) { > > inputString = inputValor.toString(); > > if (inputString.length == 11) { > > var Caracters_1_2 = inputString.charAt (0) + > > inputString.charAt(1); > > if (Caracters_1_2 == "20" || > > Caracters_1_2 == "23" || > > Caracters_1_2 == "24" || > > Caracters_1_2 == "27" || > > Caracters_1_2 == "30" || > > Caracters_1_2 == "33" || Caracters_1_2 == "34") { > > var Count = inputString.charAt(0) * 5 + inputString.charAt(1) > > * 4 + inputString.charAt (2) * 3 + inputString.charAt(3) * 2 + > > inputString.charAt(4) * 7 + inputString.charAt(5) * 6 + > > inputString.charAt(6) * 5 + inputString.charAt(7) * 4 + > > inputString.charAt(8) * 3 + inputString.charAt(9) * 2 + > > inputString.charAt (10) * 1; > > Division = Count / 11; > > if (Division == Math.floor(Division)) { > > return true; > > } > > } > > } > > return false; > > } > > > > Les paso mi implementacion en ruby > > # Algoritmo --------------------- > > def suma_producto(d, m) > > d.inject(0){|s, x| s + x.to_i * m.shift} > > end > > > > def valido?(cuit) > > cuit = cuit.clone.gsub(/\D/, "") > > return false unless cuit.size == 11 && %w{20 23 24 27 30 > > 33}.include?(cuit[0,2]) > > suma_producto(cuit.split(//), [5,4,3,2,7,6,5,4,3,2,1]) % 11 == 0 > > end > > > > # Pruebas -------------------- > > correctos = %w{27-28693823-5 27-16210173-6 20-23234048-8 27-12228410-2 > > 20186275854} > > con_error = %w{27-28693823-4 37-16210173-6 20-2323404-8 > > 27-1222841a-2} > > > > puts correctos.all?{|cuit| valido?(cuit)} > > puts !con_error.any?{|cuit| valido?(cuit)} > > > > -- > > Agilsoft > > (381) 431-4290 | Maipú 140 Of. 30 > > (4000) Tucumán | Argentina > > www.agil-soft.com > > > > _______________________________________________ > > ruby mailing list > > [email protected] > > http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar > > > > > > > ------------------------------ > > _______________________________________________ > ruby mailing list > [email protected] > http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar > > > _______________________________________________ > ruby mailing list > [email protected] > http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar > > -- Agilsoft (381) 431-4290 | Maipú 140 Of. 30 (4000) Tucumán | Argentina _______________________________________________ ruby mailing list [email protected] http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
-- Pedro Visintin . I T S o l u t i o n s A r c h i t e c t Ruby On Rails Argentina. http://blogs.onrails.com.ar Personal page: http://www.p-e-t-e-r-p-u-n-k.com.ar
_______________________________________________ ruby mailing list [email protected] http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
