Module: EdaCPFbr

Defined in:
lib/edacpfbr.rb,
lib/edacpfbr/version.rb

Constant Summary collapse

VERSION =
"0.2.1"

Class Method Summary collapse

Class Method Details

.dig1Object



21
22
23
# File 'lib/edacpfbr.rb', line 21

def self.dig1
  @cpf[9]
end

.dig2Object



25
26
27
# File 'lib/edacpfbr.rb', line 25

def self.dig2
  @cpf[10]
end

.digito(bloco) ⇒ Object



39
40
41
42
43
44
45
46
47
48
# File 'lib/edacpfbr.rb', line 39

def self.digito(bloco)
  total = 0
  (1..9).each do |i|
    ind = i - 1
    d = bloco[ind].to_i
    total += d*i
  end
  r = total % 11
  (r>9) ? 0 : r    
end

.digito_contextual(bloco) ⇒ Object



50
51
52
53
54
55
# File 'lib/edacpfbr.rb', line 50

def self.digito_contextual(bloco)
  dig = digito(bloco)
  return dig if valids
  dig = dig + 1
  dig > 9 ? 0 : dig
end

.digito_correto(bloco, dig) ⇒ Object



35
36
37
# File 'lib/edacpfbr.rb', line 35

def self.digito_correto(bloco,dig)
  digito(bloco) == dig.to_i
end

.gerar_lote(qnt) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
# File 'lib/edacpfbr.rb', line 67

def self.gerar_lote(qnt)
  lote = Array.new
  lote_blocos(qnt).each do |bloco1|
    dig1 = digito_contextual(bloco1)
    bloco2 = "#{bloco1}#{dig1}"[1..9]
    dig2 = digito(bloco2)
    @cpf = "#{bloco1}#{dig1}#{dig2}"
    lote.push(@cpf)
  end
  lote
end

.gerar_lote_invalido(qnt) ⇒ Object



62
63
64
65
# File 'lib/edacpfbr.rb', line 62

def self.gerar_lote_invalido(qnt)
  set_valids(false)
  gerar_lote(qnt)
end

.gerar_lote_valido(qnt) ⇒ Object



57
58
59
60
# File 'lib/edacpfbr.rb', line 57

def self.gerar_lote_valido(qnt)
  set_valids(true)
  gerar_lote(qnt)
end

.lote_blocos(qnt) ⇒ Object



79
80
81
82
83
84
85
86
87
88
89
# File 'lib/edacpfbr.rb', line 79

def self.lote_blocos(qnt)
  blocos = Array.new
  while (blocos.length < qnt) do
    @cpf = ""
    (1..9).each do |n|
      @cpf = "#{@cpf}#{rand(10)}"
    end
    blocos.push(@cpf) if not blocos.include?(@cpf)
  end
  blocos
end

.primeiro_blocoObject



13
14
15
# File 'lib/edacpfbr.rb', line 13

def self.primeiro_bloco
  @cpf[0..8]
end

.segundo_blocoObject



17
18
19
# File 'lib/edacpfbr.rb', line 17

def self.segundo_bloco
  @cpf[1..9]
end

.set_valids(v) ⇒ Object



95
96
97
# File 'lib/edacpfbr.rb', line 95

def self.set_valids(v)
  @valids = v
end

.validar(cpf) ⇒ Object



5
6
7
8
9
10
11
# File 'lib/edacpfbr.rb', line 5

def self.validar(cpf)
  return false if cpf.length < 11
  @cpf = cpf
  return false if not digito_correto(primeiro_bloco,dig1)
  return false if not digito_correto(segundo_bloco,dig2)
  true
end

.validar_lote(lote) ⇒ Object



29
30
31
32
33
# File 'lib/edacpfbr.rb', line 29

def self.validar_lote(lote)
  retorno_lote = Hash.new 
  lote.each{ |cpf| retorno_lote[cpf] = validar(cpf) }
  retorno_lote
end

.validsObject



91
92
93
# File 'lib/edacpfbr.rb', line 91

def self.valids
  @valids
end