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.
- checksums.yaml +4 -4
- data/README.md +446 -22
- data/lib/brazilian-utils/area-code-utils.rb +60 -0
- data/lib/brazilian-utils/bank-account-utils.rb +82 -0
- data/lib/brazilian-utils/bank-utils.rb +61 -0
- data/lib/brazilian-utils/boleto-utils.rb +139 -0
- data/lib/brazilian-utils/caepf-utils.rb +91 -0
- data/lib/brazilian-utils/cbo-utils.rb +74 -0
- data/lib/brazilian-utils/cei-utils.rb +79 -0
- data/lib/brazilian-utils/cep-utils.rb +25 -1
- data/lib/brazilian-utils/certidao-utils.rb +171 -0
- data/lib/brazilian-utils/cfop-utils.rb +74 -0
- data/lib/brazilian-utils/cnae-utils.rb +104 -0
- data/lib/brazilian-utils/cnh-utils.rb +53 -0
- data/lib/brazilian-utils/cno-utils.rb +76 -0
- data/lib/brazilian-utils/cnpj-utils.rb +125 -12
- data/lib/brazilian-utils/cns-utils.rb +110 -0
- data/lib/brazilian-utils/cpf-utils.rb +13 -0
- data/lib/brazilian-utils/credit-card-utils.rb +47 -0
- data/lib/brazilian-utils/csosn-utils.rb +55 -0
- data/lib/brazilian-utils/cst-utils.rb +103 -0
- data/lib/brazilian-utils/currency-utils.rb +347 -228
- data/lib/brazilian-utils/data/area_codes.json +676 -0
- data/lib/brazilian-utils/data/banks.json +357 -0
- data/lib/brazilian-utils/data/cbo.json +1 -0
- data/lib/brazilian-utils/data/cfop.json +1 -0
- data/lib/brazilian-utils/data/cnae.json +1 -0
- data/lib/brazilian-utils/data/csosn.json +42 -0
- data/lib/brazilian-utils/data/cst.json +294 -0
- data/lib/brazilian-utils/data/legal_nature.json +900 -0
- data/lib/brazilian-utils/data/municipalities.json +1 -0
- data/lib/brazilian-utils/data/ncm.json +1 -0
- data/lib/brazilian-utils/data/states.json +218 -0
- data/lib/brazilian-utils/date-utils.rb +504 -256
- data/lib/brazilian-utils/iban-utils.rb +120 -0
- data/lib/brazilian-utils/ie-utils.rb +84 -0
- data/lib/brazilian-utils/legal-nature-utils.rb +238 -235
- data/lib/brazilian-utils/legal-process-utils.rb +31 -3
- data/lib/brazilian-utils/license-plate-utils.rb +21 -5
- data/lib/brazilian-utils/municipality-utils.rb +58 -0
- data/lib/brazilian-utils/ncm-utils.rb +91 -0
- data/lib/brazilian-utils/nfe-key-utils.rb +158 -0
- data/lib/brazilian-utils/number-utils.rb +123 -0
- data/lib/brazilian-utils/passport-utils.rb +65 -0
- data/lib/brazilian-utils/phone-utils.rb +491 -280
- data/lib/brazilian-utils/pis-utils.rb +16 -1
- data/lib/brazilian-utils/pix-key-utils.rb +70 -0
- data/lib/brazilian-utils/pix-payload-utils.rb +253 -0
- data/lib/brazilian-utils/registro-profissional-utils.rb +112 -0
- data/lib/brazilian-utils/renavam-utils.rb +14 -0
- data/lib/brazilian-utils/state-utils.rb +105 -0
- data/lib/brazilian-utils/text-utils.rb +105 -0
- data/lib/brazilian-utils/vin-utils.rb +46 -0
- data/lib/brazilian-utils/voter-id-utils.rb +36 -0
- 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.
|
|
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:
|