codice_fiscale 0.1 → 0.2
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.
- data/lib/codice_fiscale.rb +37 -46
- data/lib/db/ee.db +1 -1
- data/lib/db/k.db +0 -0
- data/lib/db/w.db +0 -0
- data/lib/db/x.db +0 -0
- data/lib/db/y.db +0 -0
- metadata +24 -38
data/lib/codice_fiscale.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
#
|
4
4
|
# This file is part of codice_fiscale.
|
5
5
|
#
|
6
|
-
# codice_fiscale is free software: you can redistribute it and/or modify
|
6
|
+
# codice_fiscale is free software: you can redistribute it and/or modify
|
7
7
|
# it under the terms of the GNU Affero General Public License as published
|
8
8
|
# by the Free Software Foundation, either version 3 of the License, or
|
9
9
|
# (at your option) any later version.
|
@@ -17,8 +17,8 @@
|
|
17
17
|
# along with codice_fiscale. If not, see <http://www.gnu.org/licenses/>.
|
18
18
|
#++
|
19
19
|
|
20
|
-
class CodiceFiscale
|
21
|
-
VERSION = '0.
|
20
|
+
class CodiceFiscale
|
21
|
+
VERSION = '0.2'
|
22
22
|
|
23
23
|
MONTH = [nil, ?A, ?B, ?C, ?D, ?E, ?H, ?L, ?M, ?P, ?R, ?S, ?T]
|
24
24
|
|
@@ -82,14 +82,10 @@ class CodiceFiscale < String
|
|
82
82
|
|
83
83
|
def name=(n)
|
84
84
|
@name = n.upcase if n.is_a?(String) and n =~ /^[A-Z]+$/i
|
85
|
-
|
86
|
-
generate_code!
|
87
85
|
end
|
88
86
|
|
89
87
|
def surname=(s)
|
90
88
|
@surname = s.upcase if s.is_a?(String) and s =~ /^[A-Z]+$/i
|
91
|
-
|
92
|
-
generate_code!
|
93
89
|
end
|
94
90
|
|
95
91
|
def bday=(day)
|
@@ -105,8 +101,6 @@ class CodiceFiscale < String
|
|
105
101
|
@bday
|
106
102
|
else @bday
|
107
103
|
end
|
108
|
-
|
109
|
-
generate_code!
|
110
104
|
end
|
111
105
|
|
112
106
|
def bplace=(place)
|
@@ -119,21 +113,17 @@ class CodiceFiscale < String
|
|
119
113
|
prov: $2
|
120
114
|
}
|
121
115
|
end
|
122
|
-
|
123
|
-
generate_code!
|
124
116
|
end
|
125
117
|
|
126
118
|
def gender=(gen)
|
127
|
-
if gen
|
119
|
+
if gen.to_s =~ /^m(ale)?$/i
|
128
120
|
@gender = :M
|
129
|
-
elsif gen
|
121
|
+
elsif gen.to_s =~ /^f(emale)?$/i
|
130
122
|
@gender = :F
|
131
123
|
end
|
132
|
-
|
133
|
-
generate_code!
|
134
124
|
end
|
135
125
|
|
136
|
-
def initialize(options
|
126
|
+
def initialize(options={})
|
137
127
|
self.name = options[:name]
|
138
128
|
self.surname = options[:surname]
|
139
129
|
self.bday = options[:bday]
|
@@ -141,59 +131,60 @@ class CodiceFiscale < String
|
|
141
131
|
self.gender = options[:gender]
|
142
132
|
end
|
143
133
|
|
144
|
-
def
|
134
|
+
def to_s(separator=nil)
|
145
135
|
return unless self.data?
|
146
|
-
|
136
|
+
separator ||= ''
|
147
137
|
|
148
138
|
# TRIPLET FOR SURNAME
|
149
|
-
|
139
|
+
surname = (self.surname.scan(/[^AEIOU]/).join + self.surname.scan(/[AEIOU]/).join)[0, 3].ljust(3, 'X')
|
150
140
|
|
151
141
|
# TRIPLET FOR NAME
|
152
|
-
|
153
|
-
|
154
|
-
|
142
|
+
name = (self.name.scan(/[^AEIOU]/).join.tap {|cons|
|
143
|
+
cons << cons[1] && cons[1] = '' if cons.size > 3
|
144
|
+
} + self.name.scan(/[AEIOU]/).join)[0, 3].ljust(3, 'X')
|
155
145
|
|
156
146
|
# QUINTET FOR BDAY AND GENDER
|
157
|
-
|
158
|
-
|
159
|
-
|
147
|
+
q = self.bday[:year].to_s.rjust(2, '0') +
|
148
|
+
CodiceFiscale::MONTH[self.bday[:mon]] +
|
149
|
+
(self.bday[:day] + (self.gender == :F ? 40 : 0)).to_s.rjust(2, '0')
|
160
150
|
|
161
151
|
# QUARTET FOR BPLACE
|
162
|
-
|
163
|
-
|
152
|
+
b_place = self.belfiore_code(self.bplace[:city], self.bplace[:prov])
|
153
|
+
|
164
154
|
# CONTROL CODE
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
}
|
169
|
-
code << ((sum % 26) + 65).chr
|
155
|
+
code = ([surname, name, q, b_place].join.each_char.each_with_index.inject(0) {|sum, (ch, i)|
|
156
|
+
sum + ALFANUM_TO_CODE[i.odd? ? :even : :odd][ch]
|
157
|
+
} % 26 + 65).chr
|
170
158
|
|
171
|
-
|
159
|
+
[surname, name, q, b_place, code].join(separator)
|
172
160
|
end
|
173
161
|
|
174
|
-
def belfiore_code(city, province
|
175
|
-
code = nil
|
162
|
+
def self.belfiore_code(city, province=nil)
|
176
163
|
File.open(File.join(DBDIR, (province and province == 'EE' ? 'ee.db' : "#{city[0].downcase}.db"))) {|f|
|
177
164
|
f.each_line {|line|
|
178
165
|
co, c, p = line.strip.split(';')
|
179
|
-
|
166
|
+
break co if c == city and (province and province != 'EE' ? p == province : true)
|
180
167
|
}
|
181
168
|
}
|
169
|
+
end
|
182
170
|
|
183
|
-
|
171
|
+
def belfiore_code(city, province=nil)
|
172
|
+
self.class.belfiore_code(city, province)
|
184
173
|
end
|
185
174
|
|
186
|
-
def alternative(level =
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
175
|
+
def alternative(level=1, separator=nil)
|
176
|
+
self.to_s(separator).tap {|code|
|
177
|
+
code.scan(/[0-9]/).reverse[0, level].each {|n, i = code.rindex(n)|
|
178
|
+
code[i] = ALTERNATIVE[code[i]]
|
179
|
+
}
|
191
180
|
}
|
192
|
-
|
193
|
-
code
|
194
181
|
end
|
195
182
|
|
196
|
-
def
|
197
|
-
|
183
|
+
def ==(code)
|
184
|
+
code = code.to_s.scan(/[A-Z0-9]/i).join
|
185
|
+
return true if self.to_s == code
|
186
|
+
(1..7).any? {|x|
|
187
|
+
self.alternative(x) == code
|
188
|
+
}
|
198
189
|
end
|
199
190
|
end
|
data/lib/db/ee.db
CHANGED
data/lib/db/k.db
ADDED
File without changes
|
data/lib/db/w.db
ADDED
File without changes
|
data/lib/db/x.db
ADDED
File without changes
|
data/lib/db/y.db
ADDED
File without changes
|
metadata
CHANGED
@@ -1,36 +1,30 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: codice_fiscale
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 1
|
8
|
-
version: "0.1"
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.2'
|
5
|
+
prerelease:
|
9
6
|
platform: ruby
|
10
|
-
authors:
|
7
|
+
authors:
|
11
8
|
- shura
|
12
9
|
autorequire:
|
13
10
|
bindir: bin
|
14
11
|
cert_chain: []
|
15
|
-
|
16
|
-
date: 2011-01-15 00:00:00 +01:00
|
17
|
-
default_executable:
|
12
|
+
date: 2011-11-15 00:00:00.000000000 Z
|
18
13
|
dependencies: []
|
19
|
-
|
20
14
|
description: Codice fiscale library
|
21
15
|
email: shura1991@gmail.com
|
22
16
|
executables: []
|
23
|
-
|
24
17
|
extensions: []
|
25
|
-
|
26
18
|
extra_rdoc_files: []
|
27
|
-
|
28
|
-
|
19
|
+
files:
|
20
|
+
- lib/db/y.db
|
21
|
+
- lib/db/k.db
|
29
22
|
- lib/db/n.db
|
30
23
|
- lib/db/s.db
|
31
24
|
- lib/db/e.db
|
32
25
|
- lib/db/b.db
|
33
26
|
- lib/db/r.db
|
27
|
+
- lib/db/x.db
|
34
28
|
- lib/db/l.db
|
35
29
|
- lib/db/g.db
|
36
30
|
- lib/db/a.db
|
@@ -41,6 +35,7 @@ files:
|
|
41
35
|
- lib/db/f.db
|
42
36
|
- lib/db/j.db
|
43
37
|
- lib/db/t.db
|
38
|
+
- lib/db/w.db
|
44
39
|
- lib/db/c.db
|
45
40
|
- lib/db/i.db
|
46
41
|
- lib/db/v.db
|
@@ -50,37 +45,28 @@ files:
|
|
50
45
|
- lib/db/u.db
|
51
46
|
- lib/db/o.db
|
52
47
|
- lib/codice_fiscale.rb
|
53
|
-
has_rdoc: true
|
54
48
|
homepage: http://github.com/shurizzle/ruby-codice_fiscale
|
55
49
|
licenses: []
|
56
|
-
|
57
50
|
post_install_message:
|
58
51
|
rdoc_options: []
|
59
|
-
|
60
|
-
require_paths:
|
52
|
+
require_paths:
|
61
53
|
- lib
|
62
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
54
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
63
55
|
none: false
|
64
|
-
requirements:
|
65
|
-
- -
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
|
68
|
-
|
69
|
-
version: "0"
|
70
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ! '>='
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0'
|
60
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
71
61
|
none: false
|
72
|
-
requirements:
|
73
|
-
- -
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
|
76
|
-
- 0
|
77
|
-
version: "0"
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
78
66
|
requirements: []
|
79
|
-
|
80
67
|
rubyforge_project:
|
81
|
-
rubygems_version: 1.
|
68
|
+
rubygems_version: 1.8.11
|
82
69
|
signing_key:
|
83
70
|
specification_version: 3
|
84
|
-
summary: Tiny library to make easy working with codice fiscale
|
71
|
+
summary: Tiny library to make easy working with italian "codice fiscale"
|
85
72
|
test_files: []
|
86
|
-
|