Class: CpfCnpjPlus::Validator::Cpf

Inherits:
Object
  • Object
show all
Defined in:
lib/cpf_cnpj_plus/validator/cpf.rb

Overview

Responsável por validar, formatar e manipular números de CPF. Inclui métodos para checagem de validade, geração e formatação.

Class Method Summary collapse

Class Method Details

.cpf_not_valid?(cpf) ⇒ Boolean

Returns:

  • (Boolean)


39
40
41
42
43
44
# File 'lib/cpf_cnpj_plus/validator/cpf.rb', line 39

def self.cpf_not_valid?(cpf)
  cpf = cpf.to_s.gsub(/[^0-9]/, "")
  %w[00000000000 11111111111 22222222222 33333333333
     44444444444 55555555555 66666666666
     77777777777 88888888888 99999999999].include?(cpf)
end

.first_digit(cpf) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
# File 'lib/cpf_cnpj_plus/validator/cpf.rb', line 16

def self.first_digit(cpf)
  base_digits = cpf[0..8]
  soma = 0
  ponteiro = 10
  base_digits.chars.each do |char|
    soma += char.to_i * ponteiro
    ponteiro -= 1
  end
  result = soma * 10 % 11
  result == cpf[9].to_i || (result == 10 && cpf[9].to_i.zero?)
end

.second_digit(cpf) ⇒ Object



28
29
30
31
32
33
34
35
36
37
# File 'lib/cpf_cnpj_plus/validator/cpf.rb', line 28

def self.second_digit(cpf)
  base_digits = cpf[0..9]
  soma = 0
  ponteiro = 11
  base_digits.chars.each do |char|
    soma += char.to_i * ponteiro
    ponteiro -= 1
  end
  soma * 10 % 11 == cpf[10].to_i || (soma * 10 % 11 == 10 && cpf[10].to_i.zero?)
end

.valid?(cpf) ⇒ Boolean

Returns:

  • (Boolean)


8
9
10
11
12
13
14
# File 'lib/cpf_cnpj_plus/validator/cpf.rb', line 8

def self.valid?(cpf)
  cpf = cpf.to_s.gsub(/[^0-9]/, "")
  return false unless cpf.length == 11 && cpf =~ /^\d{11}$/
  return false if cpf_not_valid?(cpf)

  first_digit(cpf) && second_digit(cpf)
end