br_validator 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,34 @@
1
+ module BRValidator
2
+ class CNPJ
3
+ def self.valid?(cnpj)
4
+ digits = cnpj.gsub(/[^\d]/, '').split(//).map(&:to_i)
5
+ digits.count == 14 && match_verification_digits?(digits)
6
+ end
7
+
8
+ private
9
+
10
+ def self.match_verification_digits?(cnpj_array)
11
+ *content, vd1, vd2 = cnpj_array
12
+ calculated_vd1 = first_vd_for(content)
13
+ calculated_vd1 == vd1 && second_vd_for(content, vd1) == vd2
14
+ end
15
+
16
+ def self.first_vd_for(content)
17
+ sum = [5,4,3,2,9,8,7,6,5,4,3,2].zip(content)
18
+ .map { |i| i[0] * i[1] }
19
+ .inject(:+)
20
+ remain = sum % 11
21
+ (11 - remain < 10) ? 11 - remain : 0
22
+ end
23
+
24
+ def self.second_vd_for(content, vd1)
25
+ content << vd1
26
+ sum = [6,5,4,3,2,9,8,7,6,5,4,3,2].zip(content)
27
+ .map { |i| i[0] * i[1] }
28
+ .inject(:+)
29
+ remain = sum % 11
30
+ (11 - remain < 10) ? 11 - remain : 0
31
+ end
32
+
33
+ end
34
+ end
@@ -0,0 +1,39 @@
1
+ module BRValidator
2
+ class CPF
3
+ def self.valid?(cpf)
4
+ digits = cpf.gsub(/[^\d]/, '').split(//).map(&:to_i)
5
+ digits.count == 11 && !in_blacklist?(digits) && match_verification_digits?(digits)
6
+ end
7
+
8
+ private
9
+
10
+ # Tests if the cpf is an test-porpuse cpf
11
+ # where all digits are equal
12
+ def self.in_blacklist?(cpf_array)
13
+ cpf_array.uniq.count == 1
14
+ end
15
+
16
+ def self.match_verification_digits?(cpf_array)
17
+ *content, vd1, vd2 = cpf_array
18
+ calculated_vd1 = first_vd_for(content)
19
+ calculated_vd1 == vd1 && second_vd_for(content, vd1) == vd2
20
+ end
21
+
22
+ def self.first_vd_for(content)
23
+ sum = [10,9,8,7,6,5,4,3,2].zip(content)
24
+ .map { |i| i[0] * i[1] }
25
+ .inject(:+)
26
+ remain = sum % 11
27
+ (11 - remain < 10) ? 11 - remain : 0
28
+ end
29
+
30
+ def self.second_vd_for(content, vd1)
31
+ content << vd1
32
+ sum = [11,10,9,8,7,6,5,4,3,2].zip(content)
33
+ .map { |i| i[0] * i[1] }
34
+ .inject(:+)
35
+ remain = sum % 11
36
+ (11 - remain < 10) ? 11 - remain : 0
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,5 @@
1
+ require File.expand_path('../br_validator/cpf', __FILE__)
2
+ require File.expand_path('../br_validator/cnpj', __FILE__)
3
+
4
+ module BRValidator
5
+ end
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: br_validator
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Germano Nicolini
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-12-16 00:00:00.000000000Z
13
+ dependencies: []
14
+ description:
15
+ email: germanogmn1@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/br_validator.rb
21
+ - lib/br_validator/cnpj.rb
22
+ - lib/br_validator/cpf.rb
23
+ homepage: http://rubygems.org/gems/br_validator
24
+ licenses: []
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ! '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ none: false
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ requirements: []
42
+ rubyforge_project:
43
+ rubygems_version: 1.8.12
44
+ signing_key:
45
+ specification_version: 3
46
+ summary: Validators for the brazilian CPF and CNPJ
47
+ test_files: []