0.02
No commit activity in last 3 years
No release in over 3 years
Permite formatar e validar um atributo ActiveRecord como CPF, CNPJ ou ambos
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 1.3
~> 3.1
~> 1.3

Runtime

 Project Readme

act_as_cnpj_cpf

Build Status Code Climate Test Coverage

** Rubygem to format and validate CNPJ (Brazilian company registration number) and CPF (Brazilian citizens registration number). You can use it solo or as an ActiveRecord plugin. **

act_as_cnpj_cpf é uma Rubygem para validar e formatar CNPJ e CPF.

Funcionalidades

  • Valida CPF e CNPJ com ou sem formatação
  • Integração com ActiveRecord
  • Formata número para o padrão do CNPJ ou CPF (xx.xxx.xxx/xxxx-xx e xxx.xxx.xxx-xx)
  • Possibilidade de utilizar um atributo como CNPJ ou CPF ao mesmo tempo
  • Permite persistir cpf ou cnpj inválido (caso seja especificado com permite_invalido: true)

Este projeto foi inicialmente desenvolvido como uma extensão da gem brcpfcnpj e em seguida totalmente re-escrito por se tratar de uma proposta diferente. Além das novas funcionalidades, diferentemente do brcpfcnpj, este projeto utiliza o número sem formatação como padrão para salvar no banco de dados e exibir (podendo ser exibido formatado com .formatado)

Instalação

$ gem install act_as_cnpj_cpf

ou adicione act_as_cnpj_cpf ao seu Gemfile e em seguida bundle install:

gem 'act_as_cnpj_cpf'

Uso

ActiveRecord

CPF Válido

class Pessoa < ActiveRecord::Base
  # :cpf é um atributo no seu model Pessoa
  usar_como_cpf :cpf
end

fulano = Pessoa.new(cpf: '67392957864')
# ou
fulano = Pessoa.new(cpf: '673.929.578-64')

fulano.cpf # retorna numero sem formatação 67392957864
fulano.cpf.formatado # retorna 673.929.578-64
fulano.cpf.valido? # validação do CPF, retorna true
fulano.valid? # validação do objeto pessoa, retorna true
fulano.save # retorna true e salva sem formatação no cpf

CPF Inválido

fulano = Pessoa.new(cpf: '111111')
fulano.cpf # retorna 111111
fulano.cpf.valido? # validação do CPF, retorna false
fulano.cpf.formatado # retorna 111111
fulano.valid? # validação do objeto pessoa, retorna false
fulano.save # retorna false e adiciona mensagem de erro ao model (fulano.errors)

CNPJ Válido

class Empresa < ActiveRecord::Base
  # :cnpj é um atributo no seu model Empresa
  usar_como_cnpj :cnpj
end

company = Empresa.new(cnpj: '54609346436407')
# ou
company = Empresa.new(cnpj: '54.609.346/4364-07')

company.cnpj # retorna numero sem formatação 54609346436407
company.cnpj.formatado # retorna 54.609.346/4364-07
company.cnpj.valido? # validação do CNPJ, retorna true
company.save # retorna true e salva sem formatação no cnpj

CNPJ Inválido

company = Empresa.new(cnpj: '1111111111111')
company.cnpj # retorna 1111111111111
company.cnpj.valido? # validação do CNPJ, retorna false
company.cnpj.formatado # retorna 1111111111111
company.save # retorna false e adiciona mensagem de erro ao model (company.errors)

CNPJ e CPF no mesmo atributo

Podem existir situações onde você precise utilizar o mesmo campo ora como CNPJ ora como CPF, para isto basta utilizar usar_como_cnpj_ou_cpf:

class Cliente < ActiveRecord::Base
  # :codigo é um atributo no seu model Cliente
  usar_como_cnpj_ou_cpf :codigo
end

# para cnpj com ou sem formatação
cliente = Cliente.new(codigo: '54609346436407')
# ou para cpf com ou sem formatação
cliente = Cliente.new(codigo: '67392957864')

cliente.codigo # retorna o cpf ou cnpj informado sem formatação
cliente.codigo.formatado # retorna o cpf ou cnpj informado devidamente formatado
cliente.codigo.valido? # retorna true caso seja um cnpj ou cpf válido
cliente.save # retorna true e salva sem formatação caso seja um cnpj ou cpf válido
cliente.eh_cpf? # retorna true se o conteudo do codigo for um CPF
cliente.eh_cnpj? # retorna true se o conteudo do codigo for um CNPJ

A validação é feita de acordo com o tamanho do valor informado (após remover os caracteres especiais). Se == 11 tenta validar como CPF caso contrario tenta validar como CNPJ.

Persistir mesmo com CNPJ ou CPF Inválido

Caso o CNPJ ou CPF não sejam válidos o objeto não será salvo no banco de dados e uma mensagem de erro anexada ao objeto. Porém, podem existir casos onde você precise persistir CPF ou CNPJ inválidos para analises futuras. Para isso, utilize o atributo permite_invalido: true.

class Pessoa < ActiveRecord::Base
  usar_como_cpf :cpf, permite_invalido: true
end

class Empresa < ActiveRecord::Base
  usar_como_cnpj :cnpj, permite_invalido: true
end

class Cliente < ActiveRecord::Base
  usar_como_cnpj_ou_cpf :codigo, permite_invalido: true
end

Sem ActiveRecord

Para utilizar isoladamente basta apenas criar uma nova instancia da class Cpf, Cnpj ou CnpjOuCpf

codigo = ActAsCnpjCpf::Cnpj.new( cnpj )
codigo = ActAsCnpjCpf::Cpf.new( cpf )
codigo = ActAsCnpjCpf::CnpjOuCpf.new( cnpj_ou_cpf )

# api
codigo.valido?   # true ou false
codigo.numero    # cpf ou cnpj sem formatação
codigo.formatado # cpf ou cnpj formatado

Contribuindo

  1. Fork it ( http://github.com/josuelima/act_as_cnpj_cpf/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request