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

Responder a