cz_faker 0.0.1
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/cz_faker/address.rb +42 -0
- data/lib/cz_faker/bank.rb +117 -0
- data/lib/cz_faker/company.rb +42 -0
- data/lib/cz_faker/date.rb +27 -0
- data/lib/cz_faker/energy.rb +26 -0
- data/lib/cz_faker/name.rb +53 -0
- data/lib/cz_faker/number.rb +16 -0
- data/lib/cz_faker/payment_method.rb +10 -0
- data/lib/cz_faker/person.rb +50 -0
- data/lib/cz_faker/phone_number.rb +49 -0
- data/lib/cz_faker/validator/bank.rb +93 -0
- data/lib/cz_faker/validator/company.rb +22 -0
- data/lib/cz_faker/validator/person.rb +21 -0
- data/lib/cz_faker.rb +17 -0
- data/lib/data/address.yaml +56108 -0
- data/lib/data/bank.yaml +328 -0
- data/lib/data/name.yaml +90642 -0
- metadata +160 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5d0f86c89f74147d4fb42a1623cc1f5e50ea6505
|
4
|
+
data.tar.gz: f19457c82e839390fb712901cb9adfc409003146
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 4e1609622f0c36409361253798b008b9126e6db6bc8d392200ee50b3e5de1409f31e2d80fbdcbae04c22b8a797654c41ca327e6ef59d7b70b64d9b07f4ccff06
|
7
|
+
data.tar.gz: d535c06503e5de3e909e6741499e1053cfb6eecd0a2360f5935a338ca9aea52f1fb2a9c45150c0c223c0884c4d8a9aa0422dc6f771daeac073fe3f5a438c080b
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module CzFaker
|
2
|
+
class Address
|
3
|
+
class << self
|
4
|
+
def load_address
|
5
|
+
@address ||= Base.read_sample_data('address')
|
6
|
+
@address
|
7
|
+
end
|
8
|
+
|
9
|
+
def street
|
10
|
+
load_address['streets'].sample
|
11
|
+
end
|
12
|
+
|
13
|
+
def city
|
14
|
+
load_address['cities'].sample
|
15
|
+
end
|
16
|
+
|
17
|
+
def house_number
|
18
|
+
Number.integer(2)
|
19
|
+
end
|
20
|
+
|
21
|
+
def street_number
|
22
|
+
Number.integer(1)
|
23
|
+
end
|
24
|
+
|
25
|
+
def city_part
|
26
|
+
load_address['city_parts'].sample
|
27
|
+
end
|
28
|
+
|
29
|
+
def region
|
30
|
+
load_address['regions'].sample
|
31
|
+
end
|
32
|
+
|
33
|
+
def post_code
|
34
|
+
load_address['zips'].sample
|
35
|
+
end
|
36
|
+
|
37
|
+
def address
|
38
|
+
["#{street} #{house_number}/#{street_number}", city, post_code].join(", ")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
module CzFaker
|
2
|
+
class Bank
|
3
|
+
class << self
|
4
|
+
|
5
|
+
CARD_DEFS = {
|
6
|
+
master_card: {length: 16, prefixes: %w[51 52 53 54 55] },
|
7
|
+
maestro: { length: 16, prefixes: %w[5018 5020 5038 5893 6304 6759 6761 6762 6763]},
|
8
|
+
visa: { length: 16, prefixes: %w[4]}
|
9
|
+
}.freeze
|
10
|
+
CARD_TYPES = %i[ visa maestro master_card ].freeze
|
11
|
+
ACCOUNT_PREFIX_WEIGHTS = [ 10, 5, 8, 4, 2 ].freeze
|
12
|
+
ACCOUNT_NUMBER_WEIGHTS = [ 6, 3, 7, 9, 10, 5, 8, 4, 2 ].freeze
|
13
|
+
|
14
|
+
def load_codes
|
15
|
+
@codes ||= Base.read_sample_data('bank')
|
16
|
+
@codes
|
17
|
+
end
|
18
|
+
|
19
|
+
def full_account_number(with_prefix = false)
|
20
|
+
"#{account_number(with_prefix)}/#{bank_code}"
|
21
|
+
end
|
22
|
+
|
23
|
+
def account_number(with_prefix = false)
|
24
|
+
number = begin
|
25
|
+
base = []
|
26
|
+
sum = 0
|
27
|
+
ACCOUNT_NUMBER_WEIGHTS.each do |weight|
|
28
|
+
base << Number.integer(1).to_i
|
29
|
+
sum += (weight * base.last)
|
30
|
+
end
|
31
|
+
base << (11 - (sum % 11)) % 10
|
32
|
+
base.join.to_i.to_s
|
33
|
+
end
|
34
|
+
if with_prefix
|
35
|
+
"#{account_prefix}-#{number}"
|
36
|
+
else
|
37
|
+
number
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def bank_code
|
42
|
+
load_codes['banks'].sample['code']
|
43
|
+
end
|
44
|
+
|
45
|
+
def bank_name
|
46
|
+
load_codes['banks'].sample['name']
|
47
|
+
end
|
48
|
+
|
49
|
+
def bank_swift
|
50
|
+
while (swift = load_codes['banks'].sample['swift']) == ""
|
51
|
+
end
|
52
|
+
swift
|
53
|
+
end
|
54
|
+
|
55
|
+
def bank
|
56
|
+
load_codes['banks'].sample
|
57
|
+
end
|
58
|
+
|
59
|
+
def iban
|
60
|
+
nil
|
61
|
+
end
|
62
|
+
|
63
|
+
def credit_card(type = nil)
|
64
|
+
type = CARD_TYPES.sample if type.nil?
|
65
|
+
card_number = card_issuer_prefix(type)
|
66
|
+
(CARD_DEFS[type][:length] - 7).times do
|
67
|
+
card_number += Number.integer(1)
|
68
|
+
end
|
69
|
+
card_number += luhn(card_number).to_s
|
70
|
+
end
|
71
|
+
|
72
|
+
def credit_card_formated(type = nil)
|
73
|
+
credit_card(type).chars.each_slice(4).map(&:join).join(" ")
|
74
|
+
end
|
75
|
+
|
76
|
+
private
|
77
|
+
|
78
|
+
def account_prefix
|
79
|
+
base = []
|
80
|
+
sum = 0
|
81
|
+
ACCOUNT_PREFIX_WEIGHTS.each do |weight|
|
82
|
+
base << Number.integer(1).to_i
|
83
|
+
sum += (weight * base.last)
|
84
|
+
end
|
85
|
+
base << (11 - (sum % 11)) % 10
|
86
|
+
base.join.to_i.to_s
|
87
|
+
end
|
88
|
+
|
89
|
+
def card_issuer_prefix(type)
|
90
|
+
prefix = CARD_DEFS[type][:prefixes].sample.to_s
|
91
|
+
(6 - prefix.size).times do
|
92
|
+
prefix += Number.integer(1)
|
93
|
+
end
|
94
|
+
prefix
|
95
|
+
end
|
96
|
+
|
97
|
+
def luhn(card_number)
|
98
|
+
ss = card_number.split(//)
|
99
|
+
alternate = true
|
100
|
+
total = 0
|
101
|
+
ss.each do |c|
|
102
|
+
total += alternate ? double_mod(c.to_i) : c.to_i
|
103
|
+
alternate = !alternate
|
104
|
+
end
|
105
|
+
(10 - (total % 10)) % 10
|
106
|
+
end
|
107
|
+
|
108
|
+
def double_mod(i)
|
109
|
+
i *= 2
|
110
|
+
if i > 9
|
111
|
+
i = i % 10 + 1
|
112
|
+
end
|
113
|
+
i
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module CzFaker
|
2
|
+
class Company
|
3
|
+
LEGAL_FORMS = ['Společnost s ručením omezeným', 'Akciová společnost', 'Komanditni společnost', 'Obecně prospěšná společnost', 'Zapsaný spolek'].freeze
|
4
|
+
BASE_NAMES = ["Společnost A", "Agenda B", "Firma C", "Spolek D", "Fabrika E"].freeze
|
5
|
+
SUFFIXES = ["s.r.o", "a.s.", "k.s.", "o.p.s.", "z.s."].freeze
|
6
|
+
ICO_WEIGHTS = [8, 7, 6, 5, 4, 3, 2].freeze
|
7
|
+
|
8
|
+
class << self
|
9
|
+
def name
|
10
|
+
[base_name, suffix].join(" ")
|
11
|
+
end
|
12
|
+
|
13
|
+
def suffix
|
14
|
+
SUFFIXES.sample
|
15
|
+
end
|
16
|
+
|
17
|
+
def base_name
|
18
|
+
BASE_NAMES.sample
|
19
|
+
end
|
20
|
+
|
21
|
+
def ico
|
22
|
+
sum = 0
|
23
|
+
base = []
|
24
|
+
ICO_WEIGHTS.each do |weight|
|
25
|
+
base << Number.integer(1).to_i
|
26
|
+
sum += (weight * base.last)
|
27
|
+
end
|
28
|
+
base << (11 - (sum % 11)) % 10
|
29
|
+
base.join
|
30
|
+
end
|
31
|
+
|
32
|
+
def dic(ico = nil)
|
33
|
+
["CZ", ico.nil? ? Number.integer(9) : ico].join("")
|
34
|
+
end
|
35
|
+
|
36
|
+
def legal_form
|
37
|
+
LEGAL_FORMS.sample
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module CzFaker
|
2
|
+
class Date
|
3
|
+
|
4
|
+
MONTHS = %w[ leden únor březen duben květen červen červenec srpen září říjen listopad prosinec ].freeze
|
5
|
+
YEARS = (1950..2018).to_a.freeze
|
6
|
+
class << self
|
7
|
+
def numbers(year = 1920..(Time.now.year))
|
8
|
+
random_date(year).strftime("%-d.%-m.%Y")
|
9
|
+
end
|
10
|
+
|
11
|
+
def numbers_padded(year = 1920..(Time.now.year))
|
12
|
+
random_date(year).strftime("%d.%m.%Y")
|
13
|
+
end
|
14
|
+
|
15
|
+
def words(year = 1920..(Time.now.year))
|
16
|
+
date = random_date(year)
|
17
|
+
"#{date.day}. #{MONTHS[date.month]} #{date.year}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def random_date(year)
|
21
|
+
return rand(::Date.civil(year.min, 1, 1)..::Date.civil(year.max, 12, 31)) if year.is_a?(Range)
|
22
|
+
rand(::Date.civil(year, 1, 1)..::Date.civil(year, 12, 31))
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module CzFaker
|
2
|
+
class Energy
|
3
|
+
|
4
|
+
GAS_DISTRIBUTORS = ["RWE GasNet", "E.ON Distribuce", "Pražská Plynárenská"].freeze
|
5
|
+
ELECTRICITY_DISTRIBUTORS = ["ČEZ Distribuce", "E.ON Distribuce", "PREdistribuce"].freeze
|
6
|
+
|
7
|
+
class << self
|
8
|
+
|
9
|
+
def ean
|
10
|
+
"1"
|
11
|
+
end
|
12
|
+
|
13
|
+
def eic
|
14
|
+
"1"
|
15
|
+
end
|
16
|
+
|
17
|
+
def gas_distribution_company
|
18
|
+
GAS_DISTRIBUTORS.sample
|
19
|
+
end
|
20
|
+
|
21
|
+
def electricity_distribution_company
|
22
|
+
ELECTRICITY_DISTRIBUTORS.sample
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module CzFaker
|
2
|
+
class Name
|
3
|
+
PREFIXES = %w[Bc. Mgr. MgA. Ing. JUDr. MUDr. MDDr. MVDr. RNDr. PharmDr. PhDr. PeaDr. Dr.].freeze
|
4
|
+
SUFFIXES = %w[CSc. Ph.D. Th.D. DSc. DiS. MBA].freeze
|
5
|
+
GENDERS = %i[male female].freeze
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def load_names
|
9
|
+
@names ||= Base.read_sample_data('name')
|
10
|
+
@names
|
11
|
+
end
|
12
|
+
|
13
|
+
def first_name(gender = :random)
|
14
|
+
load_names['first_names'][random_gender(gender)].sample['name']
|
15
|
+
end
|
16
|
+
|
17
|
+
def last_name(gender = :random)
|
18
|
+
load_names['last_names'][random_gender(gender)].sample['name']
|
19
|
+
end
|
20
|
+
|
21
|
+
def name(gender = :random)
|
22
|
+
gender = random_gender(gender)
|
23
|
+
[first_name(gender), last_name(gender)].join(" ")
|
24
|
+
end
|
25
|
+
|
26
|
+
def name_with_prefix(gender = :random)
|
27
|
+
[prefix, name(gender)].join(" ")
|
28
|
+
end
|
29
|
+
|
30
|
+
def name_with_suffix(gender = :random)
|
31
|
+
[name(gender), suffix].join(" ")
|
32
|
+
end
|
33
|
+
|
34
|
+
def name_with_titles(gender = :random)
|
35
|
+
[prefix, name(gender), suffix].join(" ")
|
36
|
+
end
|
37
|
+
|
38
|
+
def random_gender(gender = :random)
|
39
|
+
return GENDERS.sample.to_s if gender == :random
|
40
|
+
gender.to_s
|
41
|
+
end
|
42
|
+
|
43
|
+
def prefix
|
44
|
+
PREFIXES.sample
|
45
|
+
end
|
46
|
+
|
47
|
+
def suffix
|
48
|
+
SUFFIXES.sample
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module CzFaker
|
2
|
+
class Number
|
3
|
+
class << self
|
4
|
+
def integer(length = 6)
|
5
|
+
if length.is_a?(Range)
|
6
|
+
length = integer_between(length.begin, length.end)
|
7
|
+
end
|
8
|
+
Array.new(length) { rand(10) }.join
|
9
|
+
end
|
10
|
+
|
11
|
+
def integer_between(min, max)
|
12
|
+
rand(max - min) + min
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module CzFaker
|
2
|
+
class Person
|
3
|
+
GENDERS = %w[ muž žena ].freeze
|
4
|
+
RELIGIONS = %w[ křesťan katolík muslim pretestant ateista žid ].freeze
|
5
|
+
|
6
|
+
class << self
|
7
|
+
def gender
|
8
|
+
GENDERS.sample
|
9
|
+
end
|
10
|
+
|
11
|
+
def birth_number(date = nil, gender = :male, slash = true)
|
12
|
+
if date
|
13
|
+
date_part = ::Date.parse(date.to_s).strftime("%y%m%d")
|
14
|
+
else
|
15
|
+
date_part = ::Date.parse(Date.numbers).strftime("%y%m%d")
|
16
|
+
"#{Number.integer(6)}/#{Number.integer(4)}"
|
17
|
+
end
|
18
|
+
if gender == :female
|
19
|
+
date_part[2] = (date_part[2].to_i + 5).to_s
|
20
|
+
end
|
21
|
+
count = rand(989).to_s.rjust(3, "0")
|
22
|
+
while (check = eleven_checksum(date_part + count)) == "10"
|
23
|
+
count = rand(989).to_s.rjust(3, "0")
|
24
|
+
end
|
25
|
+
"#{date_part}#{slash ? '/' : ''}#{count}#{check}"
|
26
|
+
end
|
27
|
+
|
28
|
+
def drivers_license
|
29
|
+
Number.integer(10)
|
30
|
+
end
|
31
|
+
|
32
|
+
def id_number
|
33
|
+
Number.integer(10)
|
34
|
+
end
|
35
|
+
|
36
|
+
def religion
|
37
|
+
RELIGIONS.sample
|
38
|
+
end
|
39
|
+
|
40
|
+
def eleven_checksum(number)
|
41
|
+
sum = 0
|
42
|
+
number.split('').each_slice(2) do |odd, even|
|
43
|
+
sum += even.to_i - odd.to_i
|
44
|
+
end
|
45
|
+
((11 - (sum % 11)) % 11).to_s
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module CzFaker
|
2
|
+
class PhoneNumber
|
3
|
+
|
4
|
+
CELL_PREFIXES = ((601..608).to_a + (702..799).to_a).map(&:to_s).freeze
|
5
|
+
LAND_LINE_PREFIXES = (200..599).to_a.map(&:to_s).freeze
|
6
|
+
FREE_LINE_PREFIXES = ["800"].freeze
|
7
|
+
COUNTRY_PREFIX = ["+420", "00420"].freeze
|
8
|
+
|
9
|
+
class << self
|
10
|
+
|
11
|
+
def cell
|
12
|
+
CELL_PREFIXES.sample + Number.integer(6)
|
13
|
+
end
|
14
|
+
|
15
|
+
def land_line
|
16
|
+
LAND_LINE_PREFIXES.sample + Number.integer(6)
|
17
|
+
end
|
18
|
+
|
19
|
+
def free_line
|
20
|
+
FREE_LINE_PREFIXES.sample + Number.integer(6)
|
21
|
+
end
|
22
|
+
|
23
|
+
def international_cell
|
24
|
+
[COUNTRY_PREFIX[0], cell].join("")
|
25
|
+
end
|
26
|
+
|
27
|
+
def international_land_line
|
28
|
+
[COUNTRY_PREFIX[0], land_line].join("")
|
29
|
+
end
|
30
|
+
|
31
|
+
def country_prefix
|
32
|
+
COUNTRY_PREFIX.sample
|
33
|
+
end
|
34
|
+
|
35
|
+
def cell_prefix
|
36
|
+
CELL_PREFIXES.sample
|
37
|
+
end
|
38
|
+
|
39
|
+
def land_line_prefix
|
40
|
+
LAND_LINE_PREFIXES.sample
|
41
|
+
end
|
42
|
+
|
43
|
+
def free_prefix
|
44
|
+
FREE_LINE_PREFIXES.sample
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
module CzFaker
|
2
|
+
module Validator
|
3
|
+
class Bank
|
4
|
+
CARD_DEFS = {
|
5
|
+
master_card: {length: 16, prefixes: %w[51 52 53 54 55] },
|
6
|
+
maestro: { length: 16, prefixes: %w[5018 5020 5038 5893 6304 6759 6761 6762 6763]},
|
7
|
+
visa: { length: 16, prefixes: %w[4]}
|
8
|
+
}.freeze
|
9
|
+
ACCOUNT_PREFIX_WEIGHTS = [ 10, 5, 8, 4, 2, 1 ].freeze
|
10
|
+
ACCOUNT_NUMBER_WEIGHTS = [ 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ].freeze
|
11
|
+
|
12
|
+
class << self
|
13
|
+
def account_number?(account_number)
|
14
|
+
prefix, number = account_number.split("-")
|
15
|
+
if prefix && number
|
16
|
+
return false if prefix.size > 6
|
17
|
+
return false unless prefix_number? prefix
|
18
|
+
else
|
19
|
+
number = prefix
|
20
|
+
end
|
21
|
+
return false if number.size > 10
|
22
|
+
base_account_number? number
|
23
|
+
end
|
24
|
+
|
25
|
+
def full_account_number?(account_number)
|
26
|
+
number, code = account_number.split("/")
|
27
|
+
return false unless account_number? number
|
28
|
+
bank_code? code
|
29
|
+
end
|
30
|
+
|
31
|
+
def credit_card?(card_number)
|
32
|
+
return false unless credit_card_issuer(card_number)
|
33
|
+
luhn(card_number)
|
34
|
+
end
|
35
|
+
|
36
|
+
def bank_code?(code)
|
37
|
+
code.size == 4
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def credit_card_issuer(card_number)
|
43
|
+
card_number = card_number.to_s
|
44
|
+
CARD_DEFS.each do |issuer, definition|
|
45
|
+
definition[:prefixes].each do |prefix|
|
46
|
+
return issuer if card_number.start_with?(prefix)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
nil
|
50
|
+
end
|
51
|
+
|
52
|
+
def base_account_number?(account_number)
|
53
|
+
account_number = account_number.to_s
|
54
|
+
number = "#{'0' * (10 - account_number.size)}#{account_number}"
|
55
|
+
sum = 0
|
56
|
+
ACCOUNT_NUMBER_WEIGHTS.each_with_index do |weight, index|
|
57
|
+
sum += number[index].to_i * weight
|
58
|
+
end
|
59
|
+
(sum % 11).zero?
|
60
|
+
end
|
61
|
+
|
62
|
+
def prefix_number?(account_prefix)
|
63
|
+
account_prefix = account_prefix.to_s
|
64
|
+
prefix = "#{'0' * (6 - account_prefix.size)}#{account_prefix}"
|
65
|
+
sum = 0
|
66
|
+
ACCOUNT_PREFIX_WEIGHTS.each_with_index do |weight, index|
|
67
|
+
sum += prefix[index].to_i * weight
|
68
|
+
end
|
69
|
+
(sum % 11).zero?
|
70
|
+
end
|
71
|
+
|
72
|
+
def luhn(card_number)
|
73
|
+
ss = card_number.split(//)
|
74
|
+
alternate = true
|
75
|
+
total = 0
|
76
|
+
ss.each do |c|
|
77
|
+
total += alternate ? double_mod(c.to_i) : c.to_i
|
78
|
+
alternate = !alternate
|
79
|
+
end
|
80
|
+
(total % 10).zero?
|
81
|
+
end
|
82
|
+
|
83
|
+
def double_mod(i)
|
84
|
+
i *= 2
|
85
|
+
if i > 9
|
86
|
+
i = i % 10 + 1
|
87
|
+
end
|
88
|
+
i
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module CzFaker
|
2
|
+
module Validator
|
3
|
+
class Company
|
4
|
+
ICO_WEIGHTS = [8, 7, 6, 5, 4, 3, 2, 1].freeze
|
5
|
+
class << self
|
6
|
+
def ico?(number)
|
7
|
+
number = "#{'0' * (8 - number.to_s.size)}#{number}"
|
8
|
+
sum = 0
|
9
|
+
ICO_WEIGHTS.each_with_index do |weight, index|
|
10
|
+
sum += (weight * number[index].to_i)
|
11
|
+
end
|
12
|
+
(sum % 11).zero?
|
13
|
+
end
|
14
|
+
|
15
|
+
def dic?(number)
|
16
|
+
return false unless number.start_with?("CZ")
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module CzFaker
|
2
|
+
module Validator
|
3
|
+
class Person
|
4
|
+
class << self
|
5
|
+
def birth_number?(birth_number)
|
6
|
+
eleven_checksum(birth_number.split('/').join('')).zero?
|
7
|
+
end
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def eleven_checksum(number)
|
12
|
+
sum = 0
|
13
|
+
number.split('').each_slice(2) do |odd, even|
|
14
|
+
sum += even.to_i - odd.to_i
|
15
|
+
end
|
16
|
+
((11 - (sum % 11)) % 11)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/cz_faker.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module CzFaker
|
4
|
+
BASE_LIB_PATH = File.expand_path(__dir__)
|
5
|
+
|
6
|
+
class Base
|
7
|
+
class << self
|
8
|
+
def read_sample_data(dataset)
|
9
|
+
data_path = "#{CzFaker::BASE_LIB_PATH}/data/#{dataset}.yaml"
|
10
|
+
YAML.load(File.open(data_path))
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
Dir.glob(File.join(File.dirname(__FILE__), 'cz_faker', '*.rb')).sort.each { |f| require f }
|
17
|
+
Dir.glob(File.join(File.dirname(__FILE__), 'cz_faker', 'validator', '*.rb')).sort.each { |f| require f }
|