pesel_parser 0.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.
- checksums.yaml +7 -0
- data/lib/fixnum.rb +5 -0
- data/lib/p_parser.rb +6 -0
- data/lib/pesel_inspector.rb +59 -0
- data/lib/pesel_parser.rb +10 -0
- data/lib/string.rb +5 -0
- metadata +91 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 11565a2fd6eb60c34f7c87331fbe5058ccdf03d6
|
4
|
+
data.tar.gz: f1c093097fefc55dde129c40833652eff5bea684
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5b3079659f917b14811ac88b267cf170a1265e76a2ebe921cd3afe67ee0769243d00449067e9a67cfe93ff5c59efe168b41371ee45106be4b9ec327d5aae0140
|
7
|
+
data.tar.gz: baed499188d0a6f02433c4b3240772021000e7eff280b0c4797bd316a6a155b16bfa63cdbe1a5acf355f2219eb0f342a39350ba78130b6c27368b4ef2926ced6
|
data/lib/fixnum.rb
ADDED
data/lib/p_parser.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# Fetch birth date, sex and series number from PESEL number
|
3
|
+
class PeselInspector
|
4
|
+
require 'date'
|
5
|
+
|
6
|
+
PeselError = Class.new(StandardError)
|
7
|
+
|
8
|
+
ERROR_MESSAGE = 'Invalid PESEL'.freeze
|
9
|
+
PESEL_LENGTH = 11
|
10
|
+
CENTURIES = { '8' => '18', '9' => '18',
|
11
|
+
'0' => '19', '1' => '19',
|
12
|
+
'2' => '20', '3' => '20',
|
13
|
+
'4' => '21', '5' => '21',
|
14
|
+
'6' => '22', '7' => '22' }.freeze
|
15
|
+
|
16
|
+
attr_reader :pesel, :birth_date, :sex, :series_number
|
17
|
+
|
18
|
+
def initialize(pes)
|
19
|
+
pesel = pes.to_s
|
20
|
+
validate(pesel)
|
21
|
+
@pesel = pesel
|
22
|
+
@birth_date = parse_birth_date
|
23
|
+
@sex = pesel[9].to_i.even? ? 'female' : 'male'
|
24
|
+
@series_number = pesel[6..9]
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def parse_birth_date
|
30
|
+
begin
|
31
|
+
date = Date.parse [day, month, year].join('/')
|
32
|
+
rescue ArgumentError
|
33
|
+
raise PeselError, ERROR_MESSAGE
|
34
|
+
end
|
35
|
+
date
|
36
|
+
end
|
37
|
+
|
38
|
+
def year
|
39
|
+
CENTURIES[pesel[2]] + pesel[0..1]
|
40
|
+
end
|
41
|
+
|
42
|
+
def day
|
43
|
+
pesel[4..5]
|
44
|
+
end
|
45
|
+
|
46
|
+
def month
|
47
|
+
pesel[2..3].to_i % 20
|
48
|
+
end
|
49
|
+
|
50
|
+
# rubocop:disable AbcSize
|
51
|
+
def validate(p)
|
52
|
+
raise PeselError, ERROR_MESSAGE unless p.size == PESEL_LENGTH
|
53
|
+
p = p.split('').map(&:to_i)
|
54
|
+
primo = p[0] + 3 * p[1] + 7 * p[2] + 9 * p[3]
|
55
|
+
secondo = p[4] + 3 * p[5] + 7 * p[6] + 9 * p[7] + p[8] + 3 * p[9] + p[10]
|
56
|
+
raise PeselError, ERROR_MESSAGE unless (primo + secondo) % 10 == 0
|
57
|
+
end
|
58
|
+
# rubocop:enable AbcSize
|
59
|
+
end
|
data/lib/pesel_parser.rb
ADDED
data/lib/string.rb
ADDED
metadata
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pesel_parser
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Maciej Kempin
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-02-05 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.8'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.8'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rubocop
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.37.0
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.37.0
|
55
|
+
description:
|
56
|
+
email:
|
57
|
+
executables: []
|
58
|
+
extensions: []
|
59
|
+
extra_rdoc_files: []
|
60
|
+
files:
|
61
|
+
- lib/fixnum.rb
|
62
|
+
- lib/p_parser.rb
|
63
|
+
- lib/pesel_inspector.rb
|
64
|
+
- lib/pesel_parser.rb
|
65
|
+
- lib/string.rb
|
66
|
+
homepage:
|
67
|
+
licenses:
|
68
|
+
- MIT
|
69
|
+
metadata: {}
|
70
|
+
post_install_message:
|
71
|
+
rdoc_options: []
|
72
|
+
require_paths:
|
73
|
+
- lib
|
74
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
requirements: []
|
85
|
+
rubyforge_project:
|
86
|
+
rubygems_version: 2.5.1
|
87
|
+
signing_key:
|
88
|
+
specification_version: 4
|
89
|
+
summary: Parses PESEL number. Validates PESEL, fetches birth date, sex and series
|
90
|
+
number
|
91
|
+
test_files: []
|