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

Responder a