br-utils 0.1.1 → 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.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +446 -22
  3. data/lib/brazilian-utils/area-code-utils.rb +60 -0
  4. data/lib/brazilian-utils/bank-account-utils.rb +82 -0
  5. data/lib/brazilian-utils/bank-utils.rb +61 -0
  6. data/lib/brazilian-utils/boleto-utils.rb +139 -0
  7. data/lib/brazilian-utils/caepf-utils.rb +91 -0
  8. data/lib/brazilian-utils/cbo-utils.rb +74 -0
  9. data/lib/brazilian-utils/cei-utils.rb +79 -0
  10. data/lib/brazilian-utils/cep-utils.rb +25 -1
  11. data/lib/brazilian-utils/certidao-utils.rb +171 -0
  12. data/lib/brazilian-utils/cfop-utils.rb +74 -0
  13. data/lib/brazilian-utils/cnae-utils.rb +104 -0
  14. data/lib/brazilian-utils/cnh-utils.rb +53 -0
  15. data/lib/brazilian-utils/cno-utils.rb +76 -0
  16. data/lib/brazilian-utils/cnpj-utils.rb +125 -12
  17. data/lib/brazilian-utils/cns-utils.rb +110 -0
  18. data/lib/brazilian-utils/cpf-utils.rb +13 -0
  19. data/lib/brazilian-utils/credit-card-utils.rb +47 -0
  20. data/lib/brazilian-utils/csosn-utils.rb +55 -0
  21. data/lib/brazilian-utils/cst-utils.rb +103 -0
  22. data/lib/brazilian-utils/currency-utils.rb +347 -228
  23. data/lib/brazilian-utils/data/area_codes.json +676 -0
  24. data/lib/brazilian-utils/data/banks.json +357 -0
  25. data/lib/brazilian-utils/data/cbo.json +1 -0
  26. data/lib/brazilian-utils/data/cfop.json +1 -0
  27. data/lib/brazilian-utils/data/cnae.json +1 -0
  28. data/lib/brazilian-utils/data/csosn.json +42 -0
  29. data/lib/brazilian-utils/data/cst.json +294 -0
  30. data/lib/brazilian-utils/data/legal_nature.json +900 -0
  31. data/lib/brazilian-utils/data/municipalities.json +1 -0
  32. data/lib/brazilian-utils/data/ncm.json +1 -0
  33. data/lib/brazilian-utils/data/states.json +218 -0
  34. data/lib/brazilian-utils/date-utils.rb +504 -256
  35. data/lib/brazilian-utils/iban-utils.rb +120 -0
  36. data/lib/brazilian-utils/ie-utils.rb +84 -0
  37. data/lib/brazilian-utils/legal-nature-utils.rb +238 -235
  38. data/lib/brazilian-utils/legal-process-utils.rb +31 -3
  39. data/lib/brazilian-utils/license-plate-utils.rb +21 -5
  40. data/lib/brazilian-utils/municipality-utils.rb +58 -0
  41. data/lib/brazilian-utils/ncm-utils.rb +91 -0
  42. data/lib/brazilian-utils/nfe-key-utils.rb +158 -0
  43. data/lib/brazilian-utils/number-utils.rb +123 -0
  44. data/lib/brazilian-utils/passport-utils.rb +65 -0
  45. data/lib/brazilian-utils/phone-utils.rb +491 -280
  46. data/lib/brazilian-utils/pis-utils.rb +16 -1
  47. data/lib/brazilian-utils/pix-key-utils.rb +70 -0
  48. data/lib/brazilian-utils/pix-payload-utils.rb +253 -0
  49. data/lib/brazilian-utils/registro-profissional-utils.rb +112 -0
  50. data/lib/brazilian-utils/renavam-utils.rb +14 -0
  51. data/lib/brazilian-utils/state-utils.rb +105 -0
  52. data/lib/brazilian-utils/text-utils.rb +105 -0
  53. data/lib/brazilian-utils/vin-utils.rb +46 -0
  54. data/lib/brazilian-utils/voter-id-utils.rb +36 -0
  55. metadata +39 -1
@@ -0,0 +1,46 @@
1
+ module BrazilianUtils
2
+ # Utilities for validating a VIN (chassi) structurally: 17 characters,
3
+ # none of the excluded letters `I`, `O`, `Q`, and the check digit at
4
+ # position 9 (the North American / ISO 3779 rule).
5
+ #
6
+ # Brazilian rules do not mandate the check digit, so many Brazilian-built
7
+ # VINs fail it; this validates structure only, as the contract does.
8
+ module VINUtils
9
+ TRANSLITERATION = {
10
+ 'A' => 1, 'B' => 2, 'C' => 3, 'D' => 4, 'E' => 5, 'F' => 6, 'G' => 7, 'H' => 8,
11
+ 'J' => 1, 'K' => 2, 'L' => 3, 'M' => 4, 'N' => 5, 'P' => 7, 'R' => 9,
12
+ 'S' => 2, 'T' => 3, 'U' => 4, 'V' => 5, 'W' => 6, 'X' => 7, 'Y' => 8, 'Z' => 9
13
+ }.freeze
14
+
15
+ WEIGHTS = [8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2].freeze
16
+
17
+ EXCLUDED_LETTERS = %w[I O Q].freeze
18
+
19
+ # Validates a VIN structurally.
20
+ #
21
+ # @param value [String] Case-insensitive.
22
+ # @return [Boolean]
23
+ def self.is_valid(value)
24
+ return false unless value.is_a?(String)
25
+
26
+ vin = value.strip.upcase
27
+ return false unless vin.length == 17
28
+ return false unless vin.match?(/\A[A-Z0-9]{17}\z/)
29
+ return false if EXCLUDED_LETTERS.any? { |l| vin.include?(l) }
30
+ return false if vin.chars.uniq.length == 1
31
+
32
+ values = vin.chars.map { |c| c.match?(/\d/) ? c.to_i : TRANSLITERATION[c] }
33
+ return false if values.include?(nil)
34
+
35
+ sum = values.each_with_index.sum { |v, i| v * WEIGHTS[i] }
36
+ remainder = sum % 11
37
+ check_char = remainder == 10 ? 'X' : remainder.to_s
38
+
39
+ vin[8] == check_char
40
+ end
41
+
42
+ class << self
43
+ alias valid? is_valid
44
+ end
45
+ end
46
+ end
@@ -176,5 +176,41 @@ module BrazilianUtils
176
176
  private_class_method :is_length_valid?, :get_sequential_number, :get_federative_union,
177
177
  :get_verifying_digits, :is_federative_union_valid?, :calculate_vd1,
178
178
  :calculate_vd2
179
+
180
+ # Removes the voter ID formatting symbols (spaces), keeping everything else.
181
+ #
182
+ # @param value [String] A voter ID, with or without spacing.
183
+ # @return [String] The value with spaces removed.
184
+ #
185
+ # @example
186
+ # remove_symbols("1234 5678 01 24") #=> "123456780124"
187
+ def self.remove_symbols(value)
188
+ return '' unless value.is_a?(String)
189
+
190
+ value.gsub(/\s/, '')
191
+ end
192
+
193
+ # Removes voter ID formatting and keeps only digits, capped to 12 digits
194
+ # (13 when the UF portion is SP or MG).
195
+ #
196
+ # @param value [String, Integer] A voter ID, with or without formatting.
197
+ # @return [String] The parsed digits.
198
+ #
199
+ # @example
200
+ # parse("1234 5678 01 24") #=> "123456780124"
201
+ # parse("1234 5678 8 01 91") #=> "1234567880191" (13-digit SP/MG form)
202
+ def self.parse(value)
203
+ return '' unless value.is_a?(String) || value.is_a?(Integer)
204
+
205
+ digits = value.to_s.gsub(/\D/, '')
206
+ return '' if digits.empty?
207
+
208
+ if digits.length > 12
209
+ candidate = digits[0, 13]
210
+ return candidate if candidate.length == 13 && %w[01 02].include?(candidate[-4..-3])
211
+ end
212
+
213
+ digits[0, 12]
214
+ end
179
215
  end
180
216
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: br-utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Rocha
@@ -97,21 +97,59 @@ files:
97
97
  - examples/pis_usage_example.rb
98
98
  - examples/renavam_usage_example.rb
99
99
  - examples/voter_id_usage_example.rb
100
+ - lib/brazilian-utils/area-code-utils.rb
101
+ - lib/brazilian-utils/bank-account-utils.rb
102
+ - lib/brazilian-utils/bank-utils.rb
100
103
  - lib/brazilian-utils/boleto-utils.rb
104
+ - lib/brazilian-utils/caepf-utils.rb
105
+ - lib/brazilian-utils/cbo-utils.rb
106
+ - lib/brazilian-utils/cei-utils.rb
101
107
  - lib/brazilian-utils/cep-utils.rb
108
+ - lib/brazilian-utils/certidao-utils.rb
109
+ - lib/brazilian-utils/cfop-utils.rb
110
+ - lib/brazilian-utils/cnae-utils.rb
102
111
  - lib/brazilian-utils/cnh-utils.rb
112
+ - lib/brazilian-utils/cno-utils.rb
103
113
  - lib/brazilian-utils/cnpj-utils.rb
114
+ - lib/brazilian-utils/cns-utils.rb
104
115
  - lib/brazilian-utils/cpf-utils.rb
116
+ - lib/brazilian-utils/credit-card-utils.rb
117
+ - lib/brazilian-utils/csosn-utils.rb
118
+ - lib/brazilian-utils/cst-utils.rb
105
119
  - lib/brazilian-utils/currency-utils.rb
120
+ - lib/brazilian-utils/data/area_codes.json
121
+ - lib/brazilian-utils/data/banks.json
122
+ - lib/brazilian-utils/data/cbo.json
123
+ - lib/brazilian-utils/data/cfop.json
124
+ - lib/brazilian-utils/data/cnae.json
125
+ - lib/brazilian-utils/data/csosn.json
126
+ - lib/brazilian-utils/data/cst.json
127
+ - lib/brazilian-utils/data/legal_nature.json
106
128
  - lib/brazilian-utils/data/legal_process_ids.json
129
+ - lib/brazilian-utils/data/municipalities.json
130
+ - lib/brazilian-utils/data/ncm.json
131
+ - lib/brazilian-utils/data/states.json
107
132
  - lib/brazilian-utils/date-utils.rb
108
133
  - lib/brazilian-utils/email-utils.rb
134
+ - lib/brazilian-utils/iban-utils.rb
135
+ - lib/brazilian-utils/ie-utils.rb
109
136
  - lib/brazilian-utils/legal-nature-utils.rb
110
137
  - lib/brazilian-utils/legal-process-utils.rb
111
138
  - lib/brazilian-utils/license-plate-utils.rb
139
+ - lib/brazilian-utils/municipality-utils.rb
140
+ - lib/brazilian-utils/ncm-utils.rb
141
+ - lib/brazilian-utils/nfe-key-utils.rb
142
+ - lib/brazilian-utils/number-utils.rb
143
+ - lib/brazilian-utils/passport-utils.rb
112
144
  - lib/brazilian-utils/phone-utils.rb
113
145
  - lib/brazilian-utils/pis-utils.rb
146
+ - lib/brazilian-utils/pix-key-utils.rb
147
+ - lib/brazilian-utils/pix-payload-utils.rb
148
+ - lib/brazilian-utils/registro-profissional-utils.rb
114
149
  - lib/brazilian-utils/renavam-utils.rb
150
+ - lib/brazilian-utils/state-utils.rb
151
+ - lib/brazilian-utils/text-utils.rb
152
+ - lib/brazilian-utils/vin-utils.rb
115
153
  - lib/brazilian-utils/voter-id-utils.rb
116
154
  homepage: https://github.com/brazilian-utils/ruby
117
155
  licenses: