cfita 0.0.5 → 0.0.6
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/cfita.gemspec +2 -2
- data/lib/cfita/codice_fiscale.rb +53 -10
- data/lib/cfita/codici_catastali.rb +10440 -10440
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ab4e090398ad28be565fc5dc2470eb89f2671d23ecc9e7fc6692140616248d53
|
4
|
+
data.tar.gz: 8ac27e3e98e65c3dbd414cb3e1345ddb91f4ee36f3eebe333b3967fd4b1632b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b7b62b6ca733a0b89aacbaffcfd12e4249ca02463c5b650d074d55284096aecfdf39af980fb26a9c4cbb3b546c5fbac9e8b969831e71d1bc4574a5c1901f821b
|
7
|
+
data.tar.gz: 524c5a1c6d6d849e939a507706db4ab5ad05177008fddf22538778e4e53a0327acffd3193a00b9f112722612b2bcd24e925b7f8489898f89d1f9cc6b9dadc515
|
data/cfita.gemspec
CHANGED
@@ -3,8 +3,8 @@
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.required_ruby_version = '>= 2.4'
|
5
5
|
s.name = 'cfita'
|
6
|
-
s.version = '0.0.
|
7
|
-
s.date = '2019-06-
|
6
|
+
s.version = '0.0.6'
|
7
|
+
s.date = '2019-06-18'
|
8
8
|
s.summary = 'Italian fiscal code checker'
|
9
9
|
s.description = 'Controllo codici fiscali italiani'
|
10
10
|
s.authors = ['Stefano Savanelli']
|
data/lib/cfita/codice_fiscale.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'active_support/all'
|
4
|
-
require 'cfita/codici_catastali'
|
4
|
+
require 'cfita/codici_catastali.rb'
|
5
5
|
|
6
6
|
module Cfita
|
7
7
|
# Controllo codice fiscale italiano
|
@@ -16,11 +16,18 @@ module Cfita
|
|
16
16
|
@ccat ||= JSON.parse(open('ccat.json'))
|
17
17
|
end
|
18
18
|
|
19
|
-
def initialize(
|
19
|
+
def initialize(
|
20
|
+
fiscal_code,
|
21
|
+
birth_place: nil,
|
22
|
+
birth_date: nil,
|
23
|
+
name: nil,
|
24
|
+
surname: nil
|
25
|
+
)
|
20
26
|
@fiscal_code = fiscal_code.upcase.strip
|
21
27
|
@birth_place = birth_place&.upcase
|
22
28
|
@birth_date = birth_date && (birth_date.is_a?(Date) ? birth_date : Date.parse(birth_date))
|
23
|
-
@
|
29
|
+
@name = name&.parameterize&.upcase
|
30
|
+
@surname = surname&.parameterize&.upcase
|
24
31
|
@errors = []
|
25
32
|
parse
|
26
33
|
end
|
@@ -29,10 +36,8 @@ module Cfita
|
|
29
36
|
fiscal_code
|
30
37
|
end
|
31
38
|
|
32
|
-
def valid?
|
33
|
-
|
34
|
-
result = birth_place?(birth_place) if result && birth_place
|
35
|
-
result
|
39
|
+
def valid?
|
40
|
+
errors.empty?
|
36
41
|
end
|
37
42
|
|
38
43
|
private
|
@@ -45,10 +50,48 @@ module Cfita
|
|
45
50
|
check_checksum
|
46
51
|
return if errors.any?
|
47
52
|
|
53
|
+
check_name
|
54
|
+
check_surname
|
48
55
|
check_birth_date
|
49
56
|
check_birth_place
|
50
57
|
end
|
51
58
|
|
59
|
+
def check_name
|
60
|
+
return unless @name
|
61
|
+
|
62
|
+
a, b, c, d = consonants(@name)
|
63
|
+
name_code = (
|
64
|
+
(d ? [a, c, d] : [a, b, c]).compact.join +
|
65
|
+
vowels(@name).join +
|
66
|
+
'XXX'
|
67
|
+
)[0..2]
|
68
|
+
|
69
|
+
errors << "Il nome non corrisponde al codice '#{name_code}'" unless name_code == @fiscal_code[3..5]
|
70
|
+
end
|
71
|
+
|
72
|
+
def check_surname
|
73
|
+
return unless @surname
|
74
|
+
|
75
|
+
surname_code = (
|
76
|
+
consonants(@surname).join +
|
77
|
+
vowels(@surname).join +
|
78
|
+
'XXX'
|
79
|
+
)[0..2]
|
80
|
+
|
81
|
+
errors << "Il cognome non corrisponde al codice '#{surname_code}'" unless surname_code == @fiscal_code[0..2]
|
82
|
+
end
|
83
|
+
|
84
|
+
VOWELS = 'AEIOU'.chars.freeze
|
85
|
+
CONSONANTS = (('A'..'Z').to_a - VOWELS).freeze
|
86
|
+
|
87
|
+
def vowels(word)
|
88
|
+
word.chars.select { |char| char.in? VOWELS }
|
89
|
+
end
|
90
|
+
|
91
|
+
def consonants(word)
|
92
|
+
word.chars.select { |char| char.in? CONSONANTS }
|
93
|
+
end
|
94
|
+
|
52
95
|
def check_size
|
53
96
|
size = @fiscal_code.size
|
54
97
|
errors << "Lunghezza errata (#{size})" unless size == 16
|
@@ -101,7 +144,7 @@ module Cfita
|
|
101
144
|
end
|
102
145
|
end
|
103
146
|
|
104
|
-
MESI = 'ABCDEHLMPRST'
|
147
|
+
MESI = 'ABCDEHLMPRST'
|
105
148
|
|
106
149
|
def check_birth_date
|
107
150
|
yy = cifre(6..7)
|
@@ -129,9 +172,9 @@ module Cfita
|
|
129
172
|
end
|
130
173
|
end
|
131
174
|
|
132
|
-
def yy2yyyy(
|
175
|
+
def yy2yyyy(year_as_yy)
|
133
176
|
Date.today.year -
|
134
|
-
(Date.today.year % 100 + 100 -
|
177
|
+
(Date.today.year % 100 + 100 - year_as_yy) % 100
|
135
178
|
end
|
136
179
|
|
137
180
|
def cifre(range)
|