Class: BraDocuments::CNPJGenerator

Inherits:
NationalRegisterBase show all
Defined in:
lib/bra_documents/cnpj_generator.rb

Constant Summary collapse

COMPANY_NUMBER_SIZE =
8
MATRIX_SUBSIDIARY_SIZE =
4

Constants inherited from NationalRegisterBase

NationalRegisterBase::BASE

Class Method Summary collapse

Class Method Details

.generate(company_number: nil, matrix_subsidiary_number: nil, formatted: false) ⇒ Object

Generates a random CNPJ document number or add verifying digits to one if it’s given. It can return only numbers or formatted with mask

BraDocuments::CNPJGenerator.generate
# => "62885807804809"

BraDocuments::CNPJGenerator.generate(formatted: true)
# => "53.855.973/0664-39"

BraDocuments::CNPJGenerator.generate(company_number: '53855973')
# => "53855973879456"

BraDocuments::CNPJGenerator.generate(company_number: '53855973', formatted: true)
# => "53.855.973/8189-02"

BraDocuments::CNPJGenerator.generate(company_number: '53855973', matrix_subsidiary_number: '0001')
# => "53855973000179"

BraDocuments::CNPJGenerator.generate(
  company_number: '53855973',
  matrix_subsidiary_number: '0001',
  formatted: true
  )
# => "53.855.973/0001-79"


36
37
38
39
40
41
42
43
44
# File 'lib/bra_documents/cnpj_generator.rb', line 36

def generate(company_number: nil, matrix_subsidiary_number: nil, formatted: false)
  company_number = number_for('Company', COMPANY_NUMBER_SIZE, company_number)
  matrix_subsidiary_number = number_for('Matrix or subsidiary', MATRIX_SUBSIDIARY_SIZE, matrix_subsidiary_number)
  numbers = company_number + matrix_subsidiary_number

  full_number = complete!(numbers)

  formatted ?  Formatter.format(full_number, as: :cnpj) : full_number
end

.valid_verification_digit?(document:) ⇒ Boolean

Returns if a CPF has a valid verification digit.

BraDocuments::CPFGenerator.valid_verification_digit?(document: '11.111.111/1111-11')
# => false

BraDocuments::CPFGenerator.valid_verification_digit?(document: '20.163.606/0001-55')
# => true

BraDocuments::CPFGenerator.valid_verification_digit?(document: '29432530000190')
# => true

Returns:

  • (Boolean)


56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/bra_documents/cnpj_generator.rb', line 56

def valid_verification_digit?(document:)
  raw_document = Formatter.raw(document)
  return false if black_listed?(raw_document) || !Matcher.match?(raw_document, kind: :cnpj, mode: :raw)

  company_number = raw_document.slice(0..(COMPANY_NUMBER_SIZE - 1))
  matrix_subsidiary_number = raw_document
    .slice(COMPANY_NUMBER_SIZE..(COMPANY_NUMBER_SIZE + MATRIX_SUBSIDIARY_SIZE - 1))
  verified_digit = raw_document.slice(-2..-1)

  generate(company_number: company_number, matrix_subsidiary_number: matrix_subsidiary_number)
    .end_with?(verified_digit)
end