cz_faker 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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 }
|