Links para agregar respuestas fuera de los divs
[donaciones.git] / lib / rut.rb
blobb018722e55ad897543c07eaf76cb94b098778c00
1 class RUT
2   def self.formatear(r)
3     return nil if self.caracteres_invalidos(r)
4     r.delete!(".-")
5     numero = r[0..-2]
6     dv = r[-1,1]
7     numero.to_s.gsub(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1.")+"-"+dv
8   end
10   def self.formatear_sin_puntos(r)
11     self.formatear(r).delete(".")
12   end
14   def self.reducir(r)
15     return nil if self.caracteres_invalidos(r)
16     r.delete(".-")
17   end
19   def self.reducir_sin_dv(r)
20     return nil if self.caracteres_invalidos(r)
21     r.gsub(/-.$/,'')
22   end
25   def self.valido?(rut)
26     rut = self.formatear_sin_puntos(rut)
28     rut_test, dv = rut.to_s.upcase.gsub(/[^0-9K-]/,'').split("-")
29     rut_test = rut_test.to_i
30     dv = dv.to_s
32     v=1
33     s=0
34     for i in (2..9)
35       if i == 8
36         v=2
37       else
38         v+=1
39       end
40       s+=v*(rut_test%10)
41       rut_test/=10
42     end
44     s = 11 - s%11
46     if s == 11
47       correct_dv = "0"
48     elsif s == 10
49       correct_dv = "K"
50     else
51       correct_dv = s.to_s
52     end
54     dv == correct_dv
55   end
57   private
59   def self.caracteres_invalidos(r)
60     r[/[^-0-9.Kk]/]
61   end
63 end