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] <mailto:[EMAIL PROTECTED]>> wrote:

    Estimados colegas... vamos a las fuentes...

    
http://seti.afip.gov.ar/padron-puc-constancia-internet/ConsultaConstanciaAction.do
    
<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 <http://www.agil-soft.com>

    _______________________________________________
    ruby mailing list
    [email protected]
    <mailto:[email protected]>
    http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
    <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

Responder a