cpf_cnpj_plus 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +9 -9
- data/lib/cpf_cnpj_plus/validator/cnpj.rb +26 -11
- data/lib/cpf_cnpj_plus/validator/cpf.rb +10 -7
- data/lib/cpf_cnpj_plus/validator.rb +7 -2
- data/lib/cpf_cnpj_plus/version.rb +1 -1
- data/lib/cpf_cnpj_plus.rb +20 -0
- metadata +5 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3471ac722167a65351c70e1e5d5cc0942bd915ba0420eaef56050778bc05809b
|
|
4
|
+
data.tar.gz: d108eadcb37093bccfe1aca2b5ce65c5c4a1bfad4ebdb312a0d111fca8e0ff95
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d4aa54004da35e9333beb2fdfce720ffec85f171cee7beb9d1204e27c576dddd7d319659581ed20569810c73468fe84c5633674536b3fa6870bee22b76c0e499
|
|
7
|
+
data.tar.gz: 22d11338440ada66d77bd93d05b74297a6a10642f25f7e634d93b44b595e6b08c55ffe06cdb5ca5f74305e44133f3f6f54d32a09001850a084a30c98b57f39be
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
|
@@ -41,19 +41,19 @@ A gem oferece uma API unificada para CPF e CNPJ. Exemplos:
|
|
|
41
41
|
require "cpf_cnpj_plus"
|
|
42
42
|
|
|
43
43
|
CPF
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
CpfCnpjPlus.valid_cpf?("123.456.789-09") # => true ou false
|
|
45
|
+
CpfCnpjPlus.format_cpf("12345678909") # => "123.456.789-09"
|
|
46
|
+
CpfCnpjPlus.generate # => Gera um CPF válido
|
|
47
47
|
|
|
48
48
|
CNPJ
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
CpfCnpjPlus.valid?("12.345.678/0001-95") # => true ou false
|
|
50
|
+
CpfCnpjPlus.format_cnpj("12345678000195") # => "12.345.678/0001-95"
|
|
51
|
+
CpfCnpjPlus.generate # => Gera um CNPJ válido
|
|
52
52
|
|
|
53
53
|
CNPJ Alfanumérico (novo formato)
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
54
|
+
CpfCnpjPlus.valid?("A1234567B00195") # => true ou false
|
|
55
|
+
CpfCnpjPlus.format_cnpj("A1234567B00195") # => "A12.345.67B/0019-5"
|
|
56
|
+
CpfCnpjPlus.generate # => Gera um CNPJ alfanumérico válido
|
|
57
57
|
```
|
|
58
58
|
|
|
59
59
|
|
|
@@ -1,17 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module CpfCnpjPlus
|
|
2
4
|
module Validator
|
|
5
|
+
# Responsável por validar, formatar e manipular números de CNPJ.
|
|
6
|
+
# Inclui métodos para checagem de validade, geração e formatação.
|
|
3
7
|
class Cnpj
|
|
4
8
|
def self.valid?(cnpj)
|
|
5
|
-
cnpj = cnpj
|
|
6
|
-
return false unless cnpj
|
|
9
|
+
cnpj = normalize(cnpj)
|
|
10
|
+
return false unless valid_length?(cnpj)
|
|
7
11
|
return false if cpj_not_valid?(cnpj)
|
|
8
|
-
return false unless cnpj
|
|
12
|
+
return false unless valid_structure?(cnpj)
|
|
9
13
|
|
|
10
14
|
base = cnpj[0..11].chars.map { |c| char_to_value(c) }
|
|
11
15
|
dv = cnpj[12..13]
|
|
12
16
|
|
|
13
|
-
|
|
14
|
-
|
|
17
|
+
dv == calculate_cnpj_digits(base)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def self.normalize(cnpj)
|
|
21
|
+
cnpj.to_s.upcase.gsub(/[^A-Z0-9]/, "")
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.valid_length?(cnpj)
|
|
25
|
+
cnpj.length == 14
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def self.valid_structure?(cnpj)
|
|
29
|
+
cnpj[0..11] =~ /^[A-Z0-9]{12}$/ && cnpj[12..13] =~ /^[0-9]{2}$/
|
|
15
30
|
end
|
|
16
31
|
|
|
17
32
|
def self.char_to_value(char)
|
|
@@ -26,11 +41,10 @@ module CpfCnpjPlus
|
|
|
26
41
|
|
|
27
42
|
def self.calculate_cnpj_digits(base)
|
|
28
43
|
first_digit = calculate_digit(base, fator_index_1d)
|
|
29
|
-
second_digit = calculate_digit(
|
|
44
|
+
second_digit = calculate_digit(base + [first_digit], fator_index_2d)
|
|
30
45
|
"#{first_digit}#{second_digit}"
|
|
31
46
|
end
|
|
32
47
|
|
|
33
|
-
|
|
34
48
|
def self.fator_index_1d
|
|
35
49
|
[5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
|
|
36
50
|
end
|
|
@@ -48,12 +62,13 @@ module CpfCnpjPlus
|
|
|
48
62
|
digit = 0 if digit == 10
|
|
49
63
|
digit
|
|
50
64
|
end
|
|
65
|
+
|
|
51
66
|
def self.cpj_not_valid?(cnpj)
|
|
52
67
|
cnpj = cnpj.to_s.gsub(/[^0-9]/, "")
|
|
53
|
-
[
|
|
54
|
-
|
|
55
|
-
|
|
68
|
+
%w[00000000000000 11111111111111 22222222222222 33333333333333
|
|
69
|
+
44444444444444 55555555555555 66666666666666 77777777777777
|
|
70
|
+
88888888888888 99999999999999].include?(cnpj)
|
|
56
71
|
end
|
|
57
72
|
end
|
|
58
73
|
end
|
|
59
|
-
end
|
|
74
|
+
end
|
|
@@ -1,15 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module CpfCnpjPlus
|
|
2
4
|
module Validator
|
|
5
|
+
# Responsável por validar, formatar e manipular números de CPF.
|
|
6
|
+
# Inclui métodos para checagem de validade, geração e formatação.
|
|
3
7
|
class Cpf
|
|
4
8
|
def self.valid?(cpf)
|
|
5
9
|
cpf = cpf.to_s.gsub(/[^0-9]/, "")
|
|
6
10
|
return false unless cpf.length == 11 && cpf =~ /^\d{11}$/
|
|
7
11
|
return false if cpj_not_valid?(cpf)
|
|
12
|
+
|
|
8
13
|
first_digit(cpf) && second_digit(cpf)
|
|
9
14
|
end
|
|
10
15
|
|
|
11
|
-
private
|
|
12
|
-
|
|
13
16
|
def self.first_digit(cpf)
|
|
14
17
|
first_digit = cpf[0..8]
|
|
15
18
|
soma = 0
|
|
@@ -31,15 +34,15 @@ module CpfCnpjPlus
|
|
|
31
34
|
soma += res
|
|
32
35
|
ponteiro -= 1
|
|
33
36
|
end
|
|
34
|
-
soma * 10 % 11 == cpf[10].to_i || (soma * 10 % 11 == 10 && cpf[10].to_i
|
|
37
|
+
soma * 10 % 11 == cpf[10].to_i || (soma * 10 % 11 == 10 && cpf[10].to_i.zero?)
|
|
35
38
|
end
|
|
36
39
|
|
|
37
40
|
def self.cpj_not_valid?(cpf)
|
|
38
41
|
cpf = cpf.to_s.gsub(/[^0-9]/, "")
|
|
39
|
-
[
|
|
40
|
-
|
|
41
|
-
|
|
42
|
+
%w[00000000000 11111111111 22222222222 33333333333
|
|
43
|
+
44444444444 55555555555 66666666666
|
|
44
|
+
77777777777 88888888888 99999999999].include?(cpf)
|
|
42
45
|
end
|
|
43
46
|
end
|
|
44
47
|
end
|
|
45
|
-
end
|
|
48
|
+
end
|
|
@@ -1,6 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module CpfCnpjPlus
|
|
4
|
+
# Módulo responsável por agrupar validadores de CPF e CNPJ.
|
|
5
|
+
# Fornece métodos e classes auxiliares para validação de documentos brasileiros,
|
|
6
|
+
# incluindo suporte a formatos tradicionais e futuros (como CNPJ alfanumérico).
|
|
2
7
|
module Validator
|
|
3
|
-
require_relative
|
|
4
|
-
require_relative
|
|
8
|
+
require_relative "validator/cnpj"
|
|
9
|
+
require_relative "validator/cpf"
|
|
5
10
|
end
|
|
6
11
|
end
|
data/lib/cpf_cnpj_plus.rb
CHANGED
|
@@ -3,8 +3,12 @@
|
|
|
3
3
|
require_relative "cpf_cnpj_plus/version"
|
|
4
4
|
require_relative "cpf_cnpj_plus/validator"
|
|
5
5
|
|
|
6
|
+
# Módulo principal da gem cpf_cnpj_plus.
|
|
7
|
+
# Fornece métodos para validação, geração e formatação de CPFs e CNPJs,
|
|
8
|
+
# incluindo suporte ao novo padrão de CNPJ alfanumérico.
|
|
6
9
|
module CpfCnpjPlus
|
|
7
10
|
class Error < StandardError; end
|
|
11
|
+
|
|
8
12
|
def self.valid_cnpj?(cnpj)
|
|
9
13
|
CpfCnpjPlus::Validator::Cnpj.valid?(cnpj)
|
|
10
14
|
end
|
|
@@ -12,4 +16,20 @@ module CpfCnpjPlus
|
|
|
12
16
|
def self.valid_cpf?(cpf)
|
|
13
17
|
CpfCnpjPlus::Validator::Cpf.valid?(cpf)
|
|
14
18
|
end
|
|
19
|
+
|
|
20
|
+
def self.format_cpf(cpf)
|
|
21
|
+
CpfCnpjPlus::Format::Cpf.format(cpf)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.format_cnpj(cnpj)
|
|
25
|
+
CpfCnpjPlus::Format::Cnpj.format(cnpj)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def self.generate_cpf
|
|
29
|
+
CpfCnpjPlus::Generate::Cpf.generate
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def self.generate_cnpj
|
|
33
|
+
CpfCnpjPlus::Generate::Cnpj.generate
|
|
34
|
+
end
|
|
15
35
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: cpf_cnpj_plus
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- DougNeo
|
|
@@ -23,9 +23,10 @@ dependencies:
|
|
|
23
23
|
- - ">="
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
25
|
version: '0'
|
|
26
|
-
description:
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
description: |-
|
|
27
|
+
Fornece métodos práticos para validar, gerar e formatar números de CPF e CNPJ, incluindo
|
|
28
|
+
ferramentas de linha de comando para facilitar integrações em sistemas bancários,
|
|
29
|
+
governamentais e aplicações Ruby em geral.
|
|
29
30
|
email:
|
|
30
31
|
- doug.neo@gmail.com
|
|
31
32
|
executables: []
|