cz_faker 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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,10 @@
1
+ module CzFaker
2
+ class PaymentMethod
3
+ METHODS = %w[ převodem složenkou SIPO inkaso ].freeze
4
+ class << self
5
+ def method
6
+ METHODS.sample
7
+ end
8
+ end
9
+ end
10
+ 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 }