cz_faker 0.0.1 → 0.0.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5d0f86c89f74147d4fb42a1623cc1f5e50ea6505
4
- data.tar.gz: f19457c82e839390fb712901cb9adfc409003146
3
+ metadata.gz: 5c22405ed6c6fa70a04dc7327c17c0417010914b
4
+ data.tar.gz: 1674ff598aeb9732d416ff4367e79cc109e1f1d1
5
5
  SHA512:
6
- metadata.gz: 4e1609622f0c36409361253798b008b9126e6db6bc8d392200ee50b3e5de1409f31e2d80fbdcbae04c22b8a797654c41ca327e6ef59d7b70b64d9b07f4ccff06
7
- data.tar.gz: d535c06503e5de3e909e6741499e1053cfb6eecd0a2360f5935a338ca9aea52f1fb2a9c45150c0c223c0884c4d8a9aa0422dc6f771daeac073fe3f5a438c080b
6
+ metadata.gz: 829c256e18268e23c0dd5eff7195d9b2267caa761d083217e8d2a47c204d8a4480f8205f2466371059ed7cfeb63ed43d663b216f8d784d1cb555653d6ee065f7
7
+ data.tar.gz: 9c6115ebe03d0f3079c638c9d347bbdee184be96697e7fbc0092112da999e39ff33059d01d490ae3112e0f7fe56076314c2dfa10c3b5f1fdfb6e497f6f5e3542
@@ -1,10 +1,6 @@
1
1
  module CzFaker
2
- class Address
2
+ class Address < CzFaker::Base
3
3
  class << self
4
- def load_address
5
- @address ||= Base.read_sample_data('address')
6
- @address
7
- end
8
4
 
9
5
  def street
10
6
  load_address['streets'].sample
@@ -37,6 +33,13 @@ module CzFaker
37
33
  def address
38
34
  ["#{street} #{house_number}/#{street_number}", city, post_code].join(", ")
39
35
  end
36
+
37
+ private
38
+
39
+ def load_address
40
+ @address ||= sample_data('address')
41
+ @address
42
+ end
40
43
  end
41
44
  end
42
45
  end
data/lib/cz_faker/bank.rb CHANGED
@@ -1,40 +1,16 @@
1
1
  module CzFaker
2
- class Bank
2
+ class Bank < CzFaker::Base
3
3
  class << self
4
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
5
  def full_account_number(with_prefix = false)
20
6
  "#{account_number(with_prefix)}/#{bank_code}"
21
7
  end
22
8
 
23
9
  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
10
  if with_prefix
35
- "#{account_prefix}-#{number}"
11
+ "#{account_base(true)}-#{account_base}"
36
12
  else
37
- number
13
+ account_base.to_s
38
14
  end
39
15
  end
40
16
 
@@ -47,7 +23,7 @@ module CzFaker
47
23
  end
48
24
 
49
25
  def bank_swift
50
- while (swift = load_codes['banks'].sample['swift']) == ""
26
+ while (swift = load_codes['banks'].sample['swift']) == ''
51
27
  end
52
28
  swift
53
29
  end
@@ -61,9 +37,9 @@ module CzFaker
61
37
  end
62
38
 
63
39
  def credit_card(type = nil)
64
- type = CARD_TYPES.sample if type.nil?
40
+ type = CzFaker::Data::CARD_TYPES.sample if type.nil?
65
41
  card_number = card_issuer_prefix(type)
66
- (CARD_DEFS[type][:length] - 7).times do
42
+ (CzFaker::Data::CARD_DEFS[type][:length] - 7).times do
67
43
  card_number += Number.integer(1)
68
44
  end
69
45
  card_number += luhn(card_number).to_s
@@ -75,19 +51,25 @@ module CzFaker
75
51
 
76
52
  private
77
53
 
78
- def account_prefix
54
+ def load_codes
55
+ @codes ||= sample_data('bank')
56
+ @codes
57
+ end
58
+
59
+ def account_base(prefix = false)
79
60
  base = []
80
61
  sum = 0
81
- ACCOUNT_PREFIX_WEIGHTS.each do |weight|
62
+ range = prefix ? 4..8 : 0..8
63
+ CzFaker::Data::ACCOUNT_NUMBER_WEIGHTS[range].each do |weight|
82
64
  base << Number.integer(1).to_i
83
65
  sum += (weight * base.last)
84
66
  end
85
67
  base << (11 - (sum % 11)) % 10
86
- base.join.to_i.to_s
68
+ (11 - (sum % 11)) >= 10 ? account_base(prefix) : base.join.to_i.to_s
87
69
  end
88
70
 
89
71
  def card_issuer_prefix(type)
90
- prefix = CARD_DEFS[type][:prefixes].sample.to_s
72
+ prefix = CzFaker::Data::CARD_DEFS[type][:prefixes].sample.to_s
91
73
  (6 - prefix.size).times do
92
74
  prefix += Number.integer(1)
93
75
  end
@@ -1,40 +1,57 @@
1
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
-
2
+ class Company < CzFaker::Base
8
3
  class << self
4
+
9
5
  def name
10
6
  [base_name, suffix].join(" ")
11
7
  end
12
8
 
13
9
  def suffix
14
- SUFFIXES.sample
10
+ CzFaker::Data::SUFFIXES.sample
15
11
  end
16
12
 
17
13
  def base_name
18
- BASE_NAMES.sample
14
+ CzFaker::Data::BASE_NAMES.sample
19
15
  end
20
16
 
21
17
  def ico
22
18
  sum = 0
23
19
  base = []
24
- ICO_WEIGHTS.each do |weight|
20
+ (0..6).to_a.each do |weight|
25
21
  base << Number.integer(1).to_i
26
- sum += (weight * base.last)
22
+ sum += (8 - weight) * base.last
27
23
  end
28
24
  base << (11 - (sum % 11)) % 10
29
25
  base.join
30
26
  end
31
27
 
32
- def dic(ico = nil)
33
- ["CZ", ico.nil? ? Number.integer(9) : ico].join("")
28
+ def dic(number = nil)
29
+ ["CZ", number.nil? ? ico : number ].join("")
30
+ end
31
+
32
+ def cznace
33
+ "Zemedelstvi"
34
+ end
35
+
36
+ def legal_form_name
37
+ load_company['legal_forms'].sample['name']
34
38
  end
35
39
 
36
- def legal_form
37
- LEGAL_FORMS.sample
40
+ def legal_form_code
41
+ load_company['legal_forms'].sample['name']
42
+ end
43
+
44
+ def legal_form_code
45
+ while (short = load_company['legal_forms'].sample['short']).nil?
46
+ end
47
+ short
48
+ end
49
+
50
+ private
51
+
52
+ def load_company
53
+ @company ||= sample_data('company')
54
+ @company
38
55
  end
39
56
 
40
57
  end
@@ -0,0 +1,53 @@
1
+ module CzFaker
2
+ class Data
3
+
4
+ # ENERGY
5
+ EAN_LENGTH = 18
6
+ EIC_LENGTH = 16
7
+ GAS_DISTRIBUTORS = [
8
+ { name: "RWE GasNet", code: "RWE", prefixes: %w[ 27ZG2 27ZG3 27ZG4 27ZG5 27ZG6 27ZG7 27ZG8]},
9
+ { name: "E.ON Distribuce", code: "EON", prefixes: %w[ 27ZG9 ] },
10
+ { name: "Pražská Plynárenská", code: "PP", prefixes: %w[ 27ZG1 ]}
11
+ ].freeze
12
+ GAS_TYPES = %w[ N Z V ].freeze
13
+ ELECTRICITY_DISTRIBUTORS = [
14
+ { name: "ČEZ Distribuce", code: "CEZ", prefixes: %w[ 8591824004 8591824005 8591824006 8591824007 8591824008 ] },
15
+ { name: "E.ON Distribuce", code: "EON", prefixes: %w[ 8591824001 8591824002 ] },
16
+ { name: "PREdistribuce", code: "PRE", prefixes: %w[ 8591824003 ] }
17
+ ].freeze
18
+ COMODITIES = %w[ plyn elektřina ].freeze
19
+
20
+ # NAME
21
+ NAME_PREFIXES = %w[Bc. Mgr. MgA. Ing. JUDr. MUDr. MDDr. MVDr. RNDr. PharmDr. PhDr. PeaDr. Dr.].freeze
22
+ NAME_SUFFIXES = %w[CSc. Ph.D. Th.D. DSc. DiS. MBA].freeze
23
+
24
+ # PERSON
25
+ GENDERS = %w[ muž žena ].freeze
26
+ GENDER_SYMBOLS = %i[ male female ].freeze
27
+ EDUCATIONS = [ "základní", "střední", "střední odborné", "vysokoškolské" ].freeze
28
+ MARITIAL_STATUSES = {
29
+ male: %w[ svobodný ženatý vdovec rozvedený ],
30
+ female: %w[ svobodná vdaná vdova rozvedená ]
31
+ }.freeze
32
+
33
+ # BANKS
34
+ CARD_DEFS = {
35
+ master_card: {length: 16, prefixes: %w[51 52 53 54 55] },
36
+ maestro: { length: 16, prefixes: %w[5018 5020 5038 5893 6304 6759 6761 6762 6763]},
37
+ visa: { length: 16, prefixes: %w[4]}
38
+ }.freeze
39
+ CARD_TYPES = %i[ visa maestro master_card ].freeze
40
+ ACCOUNT_NUMBER_WEIGHTS = [ 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ].freeze
41
+
42
+ # PHONE NUMBER
43
+ CELL_PREFIXES = ((601..608).to_a + (702..799).to_a).map(&:to_s).freeze
44
+ LAND_LINE_PREFIXES = (200..599).to_a.map(&:to_s).freeze
45
+ FREE_LINE_PREFIXES = ["800"].freeze
46
+ COUNTRY_PREFIX = ["+420", "00420"].freeze
47
+
48
+ # COMPANY
49
+ BASE_NAMES = ["Společnost A", "Agenda B", "Firma C", "Spolek D", "Fabrika E"].freeze
50
+ SUFFIXES = ["s.r.o", "a.s.", "k.s.", "o.p.s.", "z.s."].freeze
51
+ ICO_WEIGHTS = [8, 7, 6, 5, 4, 3, 2].freeze
52
+ end
53
+ end
data/lib/cz_faker/date.rb CHANGED
@@ -1,24 +1,30 @@
1
1
  module CzFaker
2
- class Date
2
+ class Date < CzFaker::Base
3
3
 
4
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
5
+ YEARS = (1950..(Time.now.year))
6
+
6
7
  class << self
7
- def numbers(year = 1920..(Time.now.year))
8
+ def numbers(year = YEARS)
8
9
  random_date(year).strftime("%-d.%-m.%Y")
9
10
  end
10
11
 
11
- def numbers_padded(year = 1920..(Time.now.year))
12
+ def numbers_without_dots(year = YEARS)
13
+ random_date(year).strftime("%d%m%Y")
14
+ end
15
+
16
+ def numbers_padded(year = YEARS)
12
17
  random_date(year).strftime("%d.%m.%Y")
13
18
  end
14
19
 
15
- def words(year = 1920..(Time.now.year))
20
+ def words(year = YEARS)
16
21
  date = random_date(year)
17
- "#{date.day}. #{MONTHS[date.month]} #{date.year}"
22
+ "#{date.day}. #{MONTHS[date.month - 1]} #{date.year}"
18
23
  end
19
24
 
20
- def random_date(year)
25
+ def random_date(year = YEARS)
21
26
  return rand(::Date.civil(year.min, 1, 1)..::Date.civil(year.max, 12, 31)) if year.is_a?(Range)
27
+
22
28
  rand(::Date.civil(year, 1, 1)..::Date.civil(year, 12, 31))
23
29
  end
24
30
 
@@ -1,25 +1,86 @@
1
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
-
2
+ class Energy < CzFaker::Base
7
3
  class << self
8
4
 
9
- def ean
10
- "1"
5
+ def ean(lds = true, dist_code = nil)
6
+ code = electricity_by_code(dist_code)[:prefixes].sample
7
+ code += "00" unless lds
8
+ (CzFaker::Data::EAN_LENGTH - code.size - 1).times do
9
+ code += Number.integer(1)
10
+ end
11
+ code += ean_checksum(code).to_s
11
12
  end
12
13
 
13
- def eic
14
- "1"
14
+ def eic(lds = true, dist_code = nil, type = nil)
15
+ code = gas_by_code(dist_code)[:prefixes].sample # 5 chars
16
+ code += lds ? Number.integer(2).to_s : "00" # 2 chars
17
+ code += type.nil? ? CzFaker::Data::GAS_TYPES.sample : type # 1 char
18
+ code += Number.integer(7) # 7 chars
19
+ code + eic_checksum(code).to_s # 1 char
15
20
  end
16
21
 
17
22
  def gas_distribution_company
18
- GAS_DISTRIBUTORS.sample
23
+ CzFaker::Data::GAS_DISTRIBUTORS.sample[:name]
19
24
  end
20
25
 
21
26
  def electricity_distribution_company
22
- ELECTRICITY_DISTRIBUTORS.sample
27
+ CzFaker::Data::ELECTRICITY_DISTRIBUTORS.sample[:name]
28
+ end
29
+
30
+ private
31
+
32
+ def ean_checksum(code)
33
+ sum = 0
34
+ code.split('').each_with_index do |value, index|
35
+ sum += index.even? ? value.to_i * 3 : value.to_i
36
+ end
37
+ (10 - sum % 10) % 10
38
+ end
39
+
40
+ def eic_checksum(code)
41
+ sum = 0
42
+ code.split('').each_with_index do |value, index|
43
+ sum += eic_char_to_int(value) * (16 - index)
44
+ end
45
+ eic_int_to_char(((37 - sum % 37) % 37))
46
+ end
47
+
48
+ def electricity_by_code(code = nil)
49
+ return CzFaker::Data::ELECTRICITY_DISTRIBUTORS.sample unless code
50
+
51
+ CzFaker::Data::ELECTRICITY_DISTRIBUTORS.each do |dist|
52
+ return dist if dist[:code] == code
53
+ end
54
+ end
55
+
56
+ def gas_by_code(code = nil)
57
+ return CzFaker::Data::GAS_DISTRIBUTORS.sample unless code
58
+
59
+ CzFaker::Data::GAS_DISTRIBUTORS.each do |dist|
60
+ return dist if dist[:code] == code
61
+ end
62
+ end
63
+
64
+ def eic_int_to_char(int)
65
+ if int < 10 && int >= 0
66
+ int.to_s
67
+ elsif int < 36 && int >= 10
68
+ (int + 'A'.ord - 10).chr
69
+ else
70
+ '-'
71
+ end
72
+ end
73
+
74
+ def eic_char_to_int(char)
75
+ if char == '-'
76
+ 36
77
+ elsif char.match?(/\A\d+\z/)
78
+ char.to_i
79
+ elsif char.match?(/\A[A-Za-z]\z/)
80
+ char.upcase.ord - 'A'.ord + 10
81
+ else
82
+ -1
83
+ end
23
84
  end
24
85
  end
25
86
  end
data/lib/cz_faker/name.rb CHANGED
@@ -1,14 +1,6 @@
1
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
-
2
+ class Name < CzFaker::Base
7
3
  class << self
8
- def load_names
9
- @names ||= Base.read_sample_data('name')
10
- @names
11
- end
12
4
 
13
5
  def first_name(gender = :random)
14
6
  load_names['first_names'][random_gender(gender)].sample['name']
@@ -36,18 +28,23 @@ module CzFaker
36
28
  end
37
29
 
38
30
  def random_gender(gender = :random)
39
- return GENDERS.sample.to_s if gender == :random
40
- gender.to_s
31
+ gender == :random ? CzFaker::Data::GENDER_SYMBOLS.sample.to_s : gender.to_s
41
32
  end
42
33
 
43
34
  def prefix
44
- PREFIXES.sample
35
+ CzFaker::Data::NAME_PREFIXES.sample
45
36
  end
46
37
 
47
38
  def suffix
48
- SUFFIXES.sample
39
+ CzFaker::Data::NAME_SUFFIXES.sample
49
40
  end
50
41
 
42
+ private
43
+
44
+ def load_names
45
+ @names ||= sample_data('name')
46
+ @names
47
+ end
51
48
  end
52
49
  end
53
50
  end
@@ -1,6 +1,8 @@
1
1
  module CzFaker
2
- class PaymentMethod
3
- METHODS = %w[ převodem složenkou SIPO inkaso ].freeze
2
+ class PaymentMethod < CzFaker::Base
3
+
4
+ METHODS = %w[ převodem složenkou SIPO inkaso sepa ].freeze
5
+
4
6
  class << self
5
7
  def method
6
8
  METHODS.sample
@@ -1,11 +1,12 @@
1
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
-
2
+ class Person < CzFaker::Base
6
3
  class << self
7
4
  def gender
8
- GENDERS.sample
5
+ CzFaker::Data::GENDERS.sample
6
+ end
7
+
8
+ def sex
9
+ gender
9
10
  end
10
11
 
11
12
  def birth_number(date = nil, gender = :male, slash = true)
@@ -25,6 +26,28 @@ module CzFaker
25
26
  "#{date_part}#{slash ? '/' : ''}#{count}#{check}"
26
27
  end
27
28
 
29
+ def race
30
+ "x"
31
+ end
32
+
33
+ def marital_status(gender = :random)
34
+ gender = CzFaker::Data::GENDER_SYMBOLS.sample if gender == :random
35
+ return CzFaker::Data::MARITIAL_STATUSES[:male].sample if gender == :male
36
+ return CzFaker::Data::MARITIAL_STATUSES[:female].sample if gender == :female
37
+ end
38
+
39
+ def height
40
+ "180"
41
+ end
42
+
43
+ def weight
44
+ "80"
45
+ end
46
+
47
+ def education
48
+ CzFaker::Data::EDUCATIONS.sample
49
+ end
50
+
28
51
  def drivers_license
29
52
  Number.integer(10)
30
53
  end
@@ -34,9 +57,11 @@ module CzFaker
34
57
  end
35
58
 
36
59
  def religion
37
- RELIGIONS.sample
60
+ load_person['religions'].sample
38
61
  end
39
62
 
63
+ private
64
+
40
65
  def eleven_checksum(number)
41
66
  sum = 0
42
67
  number.split('').each_slice(2) do |odd, even|
@@ -45,6 +70,10 @@ module CzFaker
45
70
  ((11 - (sum % 11)) % 11).to_s
46
71
  end
47
72
 
73
+ def load_person
74
+ @person ||= sample_data('person')
75
+ @person
76
+ end
48
77
  end
49
78
  end
50
79
  end
@@ -1,49 +1,42 @@
1
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
-
2
+ class PhoneNumber < CzFaker::Base
9
3
  class << self
10
4
 
11
5
  def cell
12
- CELL_PREFIXES.sample + Number.integer(6)
6
+ CzFaker::Data::CELL_PREFIXES.sample + Number.integer(6)
13
7
  end
14
8
 
15
9
  def land_line
16
- LAND_LINE_PREFIXES.sample + Number.integer(6)
10
+ CzFaker::Data::LAND_LINE_PREFIXES.sample + Number.integer(6)
17
11
  end
18
12
 
19
13
  def free_line
20
- FREE_LINE_PREFIXES.sample + Number.integer(6)
14
+ CzFaker::Data::FREE_LINE_PREFIXES.sample + Number.integer(6)
21
15
  end
22
16
 
23
17
  def international_cell
24
- [COUNTRY_PREFIX[0], cell].join("")
18
+ [CzFaker::Data::COUNTRY_PREFIX[0], cell].join("")
25
19
  end
26
20
 
27
21
  def international_land_line
28
- [COUNTRY_PREFIX[0], land_line].join("")
22
+ [CzFaker::Data::COUNTRY_PREFIX[0], land_line].join("")
29
23
  end
30
24
 
31
25
  def country_prefix
32
- COUNTRY_PREFIX.sample
26
+ CzFaker::Data::COUNTRY_PREFIX.sample
33
27
  end
34
28
 
35
29
  def cell_prefix
36
- CELL_PREFIXES.sample
30
+ CzFaker::Data::CELL_PREFIXES.sample
37
31
  end
38
32
 
39
33
  def land_line_prefix
40
- LAND_LINE_PREFIXES.sample
34
+ CzFaker::Data::LAND_LINE_PREFIXES.sample
41
35
  end
42
36
 
43
37
  def free_prefix
44
- FREE_LINE_PREFIXES.sample
38
+ CzFaker::Data::FREE_LINE_PREFIXES.sample
45
39
  end
46
-
47
40
  end
48
41
  end
49
42
  end
@@ -1,35 +1,30 @@
1
1
  module CzFaker
2
2
  module Validator
3
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
4
  class << self
13
5
  def account_number?(account_number)
14
6
  prefix, number = account_number.split("-")
15
7
  if prefix && number
16
8
  return false if prefix.size > 6
17
- return false unless prefix_number? prefix
9
+ return false unless base_account_number? prefix
18
10
  else
19
11
  number = prefix
20
12
  end
21
13
  return false if number.size > 10
14
+
22
15
  base_account_number? number
23
16
  end
24
17
 
25
18
  def full_account_number?(account_number)
26
19
  number, code = account_number.split("/")
27
20
  return false unless account_number? number
21
+
28
22
  bank_code? code
29
23
  end
30
24
 
31
25
  def credit_card?(card_number)
32
26
  return false unless credit_card_issuer(card_number)
27
+
33
28
  luhn(card_number)
34
29
  end
35
30
 
@@ -41,7 +36,7 @@ module CzFaker
41
36
 
42
37
  def credit_card_issuer(card_number)
43
38
  card_number = card_number.to_s
44
- CARD_DEFS.each do |issuer, definition|
39
+ CzFaker::Data::CARD_DEFS.each do |issuer, definition|
45
40
  definition[:prefixes].each do |prefix|
46
41
  return issuer if card_number.start_with?(prefix)
47
42
  end
@@ -50,21 +45,10 @@ module CzFaker
50
45
  end
51
46
 
52
47
  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}"
48
+ account_number = account_number.to_s.rjust(10, "0")
65
49
  sum = 0
66
- ACCOUNT_PREFIX_WEIGHTS.each_with_index do |weight, index|
67
- sum += prefix[index].to_i * weight
50
+ CzFaker::Data::ACCOUNT_NUMBER_WEIGHTS.each_with_index do |weight, index|
51
+ sum += account_number[index].to_i * weight
68
52
  end
69
53
  (sum % 11).zero?
70
54
  end
@@ -1,19 +1,21 @@
1
1
  module CzFaker
2
2
  module Validator
3
3
  class Company
4
- ICO_WEIGHTS = [8, 7, 6, 5, 4, 3, 2, 1].freeze
5
4
  class << self
6
5
  def ico?(number)
7
- number = "#{'0' * (8 - number.to_s.size)}#{number}"
6
+ number = number.rjust(8, "0")
8
7
  sum = 0
9
- ICO_WEIGHTS.each_with_index do |weight, index|
10
- sum += (weight * number[index].to_i)
8
+ (0..6).to_a.each do |index|
9
+ sum += number[index].to_i * (8 - index)
11
10
  end
12
- (sum % 11).zero?
11
+ number.split('').last.to_i == (11 - sum % 11) % 10
13
12
  end
14
13
 
15
14
  def dic?(number)
16
15
  return false unless number.start_with?("CZ")
16
+
17
+ number = number[2..-1]
18
+ ico?(number) || CzFaker::Validator::Person.birth_number?(number) ? true : false
17
19
  end
18
20
 
19
21
  end
@@ -0,0 +1,80 @@
1
+ module CzFaker
2
+ module Validator
3
+ class Energy < CzFaker::Base
4
+ class << self
5
+
6
+ def ean?(code)
7
+ return false unless code.to_s.size == CzFaker::Data::EAN_LENGTH
8
+ return false if ean_distributor(code).nil?
9
+
10
+ ean_checksum(code)
11
+ end
12
+
13
+ def eic?(code)
14
+ return false unless code.to_s.size == CzFaker::Data::EIC_LENGTH
15
+ return false if eic_distributor(code).nil?
16
+
17
+ eic_checksum(code) == '0'
18
+ end
19
+
20
+ private
21
+
22
+ def ean_distributor(code)
23
+ CzFaker::Data::ELECTRICITY_DISTRIBUTORS.each do |dist|
24
+ dist[:prefixes].each do |prefix|
25
+ return dist if code.start_with?(prefix)
26
+ end
27
+ end
28
+ nil
29
+ end
30
+
31
+ def eic_distributor(code)
32
+ CzFaker::Data::GAS_DISTRIBUTORS.each do |dist|
33
+ dist[:prefixes].each do |prefix|
34
+ return dist if code.start_with?(prefix)
35
+ end
36
+ end
37
+ nil
38
+ end
39
+
40
+ def eic_checksum(code)
41
+ sum = 0
42
+ code.split('').each_with_index do |value, index|
43
+ sum += eic_char_to_int(value) * (16 - index)
44
+ end
45
+ eic_int_to_char((37 - sum % 37) % 37)
46
+ end
47
+
48
+ def eic_int_to_char(int)
49
+ if int < 10 && int >= 0
50
+ int.to_s
51
+ elsif int < 36 && int >= 10
52
+ (int + 'A'.ord - 10).chr
53
+ else
54
+ '-'
55
+ end
56
+ end
57
+
58
+ def eic_char_to_int(char)
59
+ if char == '-'
60
+ 36
61
+ elsif char.match?(/\A\d+\z/)
62
+ char.to_i
63
+ elsif char.match?(/\A[A-Za-z]\z/)
64
+ char.upcase.ord - 'A'.ord + 10
65
+ else
66
+ -1
67
+ end
68
+ end
69
+
70
+ def ean_checksum(code)
71
+ sum = 0
72
+ code.split('').each_with_index do |value, index|
73
+ sum += (index % 2).zero? ? value.to_i * 3 : value.to_i
74
+ end
75
+ (sum % 10).zero?
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,40 @@
1
+ module CzFaker
2
+ class Vehicle < CzFaker::Base
3
+ PLATE_METHODS = %i[ numberplate_old numberplate_new numberplate_new_custom ].freeze
4
+ class << self
5
+
6
+ def vin
7
+ "x"
8
+ end
9
+
10
+ def numberplate
11
+ send(PLATE_METHODS.sample.to_sym)
12
+ end
13
+
14
+ def numberplate_old(region = nil)
15
+ code = load_plates['old_regions'].sample['code']
16
+ prefix = code.is_a?(Array) ? code.sample : code
17
+ prefix += ('A'..'Z').to_a.sample
18
+ prefix += ('A'..'Z').to_a.sample if prefix.size == 2
19
+ "#{prefix}#{Number.integer(2)}-#{Number.integer(2)}"
20
+ end
21
+
22
+ def numberplate_new(region = nil)
23
+ code = load_plates['new_regions'].sample['code']
24
+ prefix = code.is_a?(Array) ? code.sample : code
25
+ "#{Number.integer_between(1, 9)}#{prefix}#{Number.integer(1)}#{Number.integer(4)}"
26
+ end
27
+
28
+ def numberplate_new_custom
29
+ "SUPRM4N"
30
+ end
31
+
32
+ private
33
+
34
+ def load_plates
35
+ @plates ||= sample_data('vehicle')
36
+ @plates
37
+ end
38
+ end
39
+ end
40
+ end
data/lib/cz_faker.rb CHANGED
@@ -5,7 +5,7 @@ module CzFaker
5
5
 
6
6
  class Base
7
7
  class << self
8
- def read_sample_data(dataset)
8
+ def sample_data(dataset)
9
9
  data_path = "#{CzFaker::BASE_LIB_PATH}/data/#{dataset}.yaml"
10
10
  YAML.load(File.open(data_path))
11
11
  end
@@ -0,0 +1,223 @@
1
+ legal_forms:
2
+ - code: 100
3
+ name: Podnikající osoba tuzemská
4
+ - code: 101
5
+ name: Fyzická osoba podnikající dle živnostenského zákona nezapsaná v obchodním rejstříku
6
+ - code: 102
7
+ name: Fyzická osoba podnikající dle živnostenského zákona zapsaná v obchodním rejstříku
8
+ - code: 104
9
+ name: Samostatně hospodařící rolník zapsaný v obchodním rejstříku
10
+ - code: 105
11
+ name: Fyzická osoba podnikající dle jiných zákonů než živnostenského a zákona o zemědělství nezapsaná v obchodním rejstříku
12
+ - code: 106
13
+ name: Fyzická osoba podnikající dle jiných zákonů než živnostenského a zákona o zemědělství zapsaná v obchodním rejstříku
14
+ - code: 107
15
+ name: Zemědělský podnikatel - fyzická osoba nezapsaná v obchodním rejstříku
16
+ - code: 108
17
+ name: Zemědělský podnikatel - fyzická osoba zapsaná v obchodním rejstříku
18
+ - code: 111
19
+ short: 'v.o.s.'
20
+ name: Veřejná obchodní společnost
21
+ - code: 112
22
+ short: 's.r.o.'
23
+ name: Společnost s ručením omezeným
24
+ - code: 113
25
+ name: Společnost komanditní
26
+ - code: 115
27
+ short: 'k.s.'
28
+ name: Společný podnik
29
+ - code: 116
30
+ name: Zájmové sdružení
31
+ - code: 117
32
+ name: Nadace
33
+ - code: 118
34
+ name: Nadační fond
35
+ - code: 121
36
+ short: 'a.s.'
37
+ name: Akciová společnost
38
+ - code: 141
39
+ short: 'o.p.s.'
40
+ name: Obecně prospěšná společnost
41
+ - code: 145
42
+ short: 'SVJ'
43
+ name: Společenství vlastníků jednotek
44
+ - code: 151
45
+ name: Komoditní burza
46
+ - code: 152
47
+ name: Garanční fond obchodníků s cennými papíry
48
+ - code: 161
49
+ name: Ústav
50
+ - code: 201
51
+ name: Zemědělské družstvo
52
+ - code: 205
53
+ name: Družstvo
54
+ - code: 231
55
+ name: Výrobní družstvo
56
+ - code: 232
57
+ name: Spotřební družstvo
58
+ - code: 233
59
+ name: Bytové družstvo
60
+ - code: 234
61
+ name: Jiné družstvo
62
+ - code: 241
63
+ name: Družstevní podnik (s jedním zakladatelem)
64
+ - code: 242
65
+ name: Společný podnik (s více zakladateli)
66
+ - code: 251
67
+ name: Zájmová organizace družstev
68
+ - code: 261
69
+ name: Společná zájmová organizace družstev
70
+ - code: 301
71
+ short: 's.p.'
72
+ name: Státní podnik
73
+ - code: 302
74
+ short: 'n.p.'
75
+ name: Národní podnik
76
+ - code: 312
77
+ name: Banka-státní peněžní ústav
78
+ - code: 313
79
+ name: Česká národní banka
80
+ - code: 314
81
+ name: Česká konsolidační agentura
82
+ - code: 325
83
+ name: Organizační složka státu
84
+ - code: 331
85
+ name: Příspěvková organizace
86
+ - code: 332
87
+ name: Státní příspěvková organizace
88
+ - code: 352
89
+ name: Správa železniční dopravní cesty, státní organizace
90
+ - code: 353
91
+ name: Rada pro veřejný dohled nad auditem
92
+ - code: 361
93
+ name: Veřejnoprávní instituce (ČT,ČRo,ČTK)
94
+ - code: 362
95
+ name: Česká tisková kancelář
96
+ - code: 381
97
+ name: Fond (ze zákona)
98
+ - code: 382
99
+ name: Státní fond ze zákona
100
+ - code: 391
101
+ name: Zdravotní pojišťovna
102
+ - code: 401
103
+ name: Sdružení mezinárodního obchodu
104
+ - code: 411
105
+ name: Podnik se zahraniční majetkovou účastí
106
+ - code: 421
107
+ name: Odštěpný závod zahraniční právnické osoby
108
+ - code: 422
109
+ name: Organizační složka zahraničního nadačního fondu
110
+ - code: 423
111
+ name: Organizační složka zahraniční nadace
112
+ - code: 424
113
+ name: Zahraniční
114
+ - code: 425
115
+ name: Odštěpný závod zahraniční fyzické osoby
116
+ - code: 426
117
+ name: Zastoupení zahraniční banky
118
+ - code: 441
119
+ name: Podnik zahraničního obchodu
120
+ - code: 501
121
+ name: Odštěpný závod nebo jiná organizační složka podniku zapisující se do obchodního rejstříku
122
+ - code: 521
123
+ name: Samostatná drobná provozovna obecního úřadu
124
+ - code: 525
125
+ name: Vnitřní organizační jednotka organizační složky státu
126
+ - code: 541
127
+ name: Podílový fond
128
+ - code: 601
129
+ name: Vysoká škola
130
+ - code: 641
131
+ name: Školská právnická osoba
132
+ - code: 651
133
+ name: Zdravotnické zařízení
134
+ - code: 661
135
+ name: Veřejná výzkumná instituce
136
+ - code: 671
137
+ name: Veřejné neziskové ústavní zdravotnické zařízení
138
+ - code: 701
139
+ name: Sdružení (svaz, spolek, společnost, klub aj.)
140
+ - code: 703
141
+ name: Odborová organizace a organizace zaměstnavatelů
142
+ - code: 704
143
+ name: Zvláštní organizace pro zastoupení českých zájmů v mezinárodních nevládních organizacích
144
+ - code: 705
145
+ name: Podnik nebo hospodářské zařízení sdružení
146
+ - code: 706
147
+ name: Spolek
148
+ - code: 707
149
+ name: Odborová organizace
150
+ - code: 708
151
+ name: Organizace zaměstnavatelů
152
+ - code: 711
153
+ name: Politická strana, politické hnutí
154
+ - code: 715
155
+ name: Podnik nebo hospodářské zařízení politické strany
156
+ - code: 721
157
+ name: Církevní organizace
158
+ - code: 722
159
+ name: Evidované církevní právnické osoby
160
+ - code: 723
161
+ name: Svazy církví a náboženských společností
162
+ - code: 731
163
+ name: Organizační jednotka sdružení
164
+ - code: 732
165
+ name: Organizační jednotka politické strany, politického hnutí
166
+ - code: 733
167
+ name: Organizační jednotka odborové organizace a organizace zaměstnavatelů
168
+ - code: 736
169
+ name: Pobočný spolek
170
+ - code: 741
171
+ name: Stavovská organizace - profesní komora
172
+ - code: 745
173
+ name: Komora (s výjimkou profesních komor)
174
+ - code: 751
175
+ name: Zájmové sdružení právnických osob
176
+ - code: 761
177
+ name: Honební společenstvo
178
+ - code: 771
179
+ name: Svazek obcí
180
+ - code: 801
181
+ name: Obec nebo městská část hlavního města Prahy
182
+ - code: 804
183
+ name: Kraj
184
+ - code: 805
185
+ name: Regionální rada regionu soudržnosti
186
+ - code: 811
187
+ name: Městská část, městský obvod
188
+ - code: 901
189
+ name: Zastupitelský orgán jiných států
190
+ - code: 906
191
+ name: Zahraniční spolek
192
+ - code: 907
193
+ name: Mezinárodní odborová organizace
194
+ - code: 908
195
+ name: Mezinárodní organizace zaměstnavatelů
196
+ - code: 911
197
+ name: Zahraniční kulturní, informační středisko, rozhlasová, tisková a televizní agentura
198
+ - code: 921
199
+ name: Mezinárodní organizace a sdružení
200
+ - code: 922
201
+ name: Organizační jednotka organizace s mezinárodním prvkem
202
+ - code: 931
203
+ name: Evropské hospodářské zájmové sdružení
204
+ - code: 932
205
+ name: Evropská společnost
206
+ - code: 933
207
+ name: Evropská družstevní společnost
208
+ - code: 936
209
+ name: Zahraniční pobočný spolek
210
+ - code: 937
211
+ name: Pobočná mezinárodní odborová organizace
212
+ - code: 938
213
+ name: Pobočná mezinárodní organizace zaměstnavatelů
214
+ - code: 941
215
+ name: Evropské seskupení pro územní spolupráci
216
+ - code: 950
217
+ name: Subjekt právním řádem výslovně neupravený
218
+ - code: 960
219
+ name: Právnická osoba zřízená zvláštním zákonem zapisovaná do veřejného rejstříku
220
+ - code: 961
221
+ name: Svěřenský fond
222
+ - code: 962
223
+ name: Zahraniční svěřenský fond
@@ -0,0 +1,26 @@
1
+ religions:
2
+ - křesťanství
3
+ - katolictví
4
+ - evangelictví
5
+ - protestantismus
6
+ - pravoslaví
7
+ - judaismus
8
+ - islám
9
+ - buddhismus
10
+ - tibetský buddhismus (vadžrajána)
11
+ - mahájána
12
+ - Zen
13
+ - Čchan
14
+ - théraváda
15
+ - hinduismus
16
+ - novopohanský rekonstrukcionismus
17
+ - slovanský
18
+ - germánský (Ásatrú)
19
+ - keltský (druidismus)
20
+ - eklektické novopohanství
21
+ - neodruidismus
22
+ - Wicca
23
+ - scientologie
24
+ - hnutí Haré Kršna
25
+ - jedi
26
+ - sith
@@ -0,0 +1,184 @@
1
+ new_regions:
2
+ - code: A
3
+ region: Praha
4
+ - code: B
5
+ region: Jihomoravský kraj (Brno)
6
+ - code: C
7
+ region: Jihočeský kraj (České Budějovice)
8
+ - code: E
9
+ region: Pardubický kraj
10
+ - code: H
11
+ region: Královéhradecký kraj
12
+ - code: J
13
+ region: Kraj Vysočina (Jihlava)
14
+ - code: K
15
+ region: Karlovarský kraj
16
+ - code: L
17
+ region: Liberecký kraj
18
+ - code: M
19
+ region: Olomoucký kraj
20
+ - code: P
21
+ region: Plzeňský kraj
22
+ - code: S
23
+ region: Středočeský kraj
24
+ - code: T
25
+ region: Moravskoslezský kraj (Ostrava)
26
+ - code: U
27
+ region: Ústecký kraj
28
+ - code: Z
29
+ region: Zlínský kraj
30
+ old_regions:
31
+ - code: A
32
+ region: Praha
33
+ - code: BE
34
+ region: Beroun
35
+ - code: [ BI, BO ]
36
+ region: Brno - venkov
37
+ - code: BK
38
+ region: Blansko
39
+ - code: [ BM, BS, BZ ]
40
+ region: Brno - město
41
+ - code: BN
42
+ region: Benešov
43
+ - code: BR
44
+ region: Bruntál
45
+ - code: BV
46
+ region: Břeclav
47
+ - code: [ CB, CE ]
48
+ region: České Budějovice
49
+ - code: CH
50
+ region: Cheb
51
+ - code: CK
52
+ region: Český Krumlov
53
+ - code: CL
54
+ region: Česká Lípa
55
+ - code: CR
56
+ region: Chrudim
57
+ - code: CV
58
+ region: Chomutov
59
+ - code: DC
60
+ region: Děčín
61
+ - code: DO
62
+ region: Domažlice
63
+ - code: [ FI, FM ]
64
+ region: Frýdek-Místek
65
+ - code: HB
66
+ region: Havlíčkův Brod
67
+ - code: [ HK, HR ]
68
+ region: Hradec Králové
69
+ - code: HO
70
+ region: Hodonín
71
+ - code: JC
72
+ region: Jičín
73
+ - code: JE
74
+ region: Jeseník
75
+ - code: JH
76
+ region: Jindřichův Hradec
77
+ - code: JI
78
+ region: Jihlava
79
+ - code: JN
80
+ region: Jablonec nad Nisou
81
+ - code: [ KA, KI ]
82
+ region: Karviná
83
+ - code: [ KD, KL ]
84
+ region: Kladno
85
+ - code: KH
86
+ region: Kutná Hora
87
+ - code: KM
88
+ region: Kroměříž
89
+ - code: KO
90
+ region: Kolín
91
+ - code: [ KR, KV ]
92
+ region: Karlovy Vary
93
+ - code: KT
94
+ region: Klatovy
95
+ - code: [ LB, LI ]
96
+ region: Liberec
97
+ - code: LN
98
+ region: Louny
99
+ - code: LT
100
+ region: Litoměřice
101
+ - code: MB
102
+ region: Mladá Boleslav
103
+ - code: ME
104
+ region: Mělník
105
+ - code: MO
106
+ region: Most
107
+ - code: NA
108
+ region: Náchod
109
+ - code: NB
110
+ region: Nymburk
111
+ - code: NJ
112
+ region: Nový Jičín
113
+ - code: [ OC, OL, OM ]
114
+ region: Olomouc
115
+ - code: OP
116
+ region: Opava
117
+ - code: [ OS, OT, OV ]
118
+ region: Ostrava
119
+ - code: [ PA, PU ]
120
+ region: Pardubice
121
+ - code: PB
122
+ region: Příbram
123
+ - code: [ PC, PZ ]
124
+ region: Praha - západ
125
+ - code: PE
126
+ region: Pelhřimov
127
+ - code: [ PH, PY ]
128
+ region: Praha - východ
129
+ - code: PI
130
+ region: Písek
131
+ - code: PJ
132
+ region: Plzeň - jih
133
+ - code: [ PM, PN ]
134
+ region: Plzeň - město
135
+ - code: PR
136
+ region: Přerov
137
+ - code: PS
138
+ region: Plzeň - sever
139
+ - code: PT
140
+ region: Prachatice
141
+ - code: PV
142
+ region: Prostějov
143
+ - code: RA
144
+ region: Rakovník
145
+ - code: RK
146
+ region: Rychnov nad Kněžnou
147
+ - code: RO
148
+ region: Rokycany
149
+ - code: SM
150
+ region: Semily
151
+ - code: SO
152
+ region: Sokolov
153
+ - code: ST
154
+ region: Strakonice
155
+ - code: SU
156
+ region: Šumperk
157
+ - code: SY
158
+ region: Svitavy
159
+ - code: TA
160
+ region: Tábor
161
+ - code: TC
162
+ region: Tachov
163
+ - code: TP
164
+ region: Teplice
165
+ - code: TR
166
+ region: Třebíč
167
+ - code: TU
168
+ region: Trutnov
169
+ - code: UH
170
+ region: Uherské Hradiště
171
+ - code: [ UL, US ]
172
+ region: Ústí nad Labem
173
+ - code: UO
174
+ region: Ústí nad Orlicí
175
+ - code: VS
176
+ region: Vsetín
177
+ - code: VY
178
+ region: Vyškov
179
+ - code: [ ZL, GT ]
180
+ region: Zlín (dříve Gottwaldov)
181
+ - code: ZN
182
+ region: Znojmo
183
+ - code: ZR
184
+ region: žďár nad Sázavou
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cz_faker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jindrich Skupa (@eMan)
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-08 00:00:00.000000000 Z
11
+ date: 2018-09-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -120,6 +120,7 @@ files:
120
120
  - lib/cz_faker/address.rb
121
121
  - lib/cz_faker/bank.rb
122
122
  - lib/cz_faker/company.rb
123
+ - lib/cz_faker/data.rb
123
124
  - lib/cz_faker/date.rb
124
125
  - lib/cz_faker/energy.rb
125
126
  - lib/cz_faker/name.rb
@@ -129,10 +130,15 @@ files:
129
130
  - lib/cz_faker/phone_number.rb
130
131
  - lib/cz_faker/validator/bank.rb
131
132
  - lib/cz_faker/validator/company.rb
133
+ - lib/cz_faker/validator/energy.rb
132
134
  - lib/cz_faker/validator/person.rb
135
+ - lib/cz_faker/vehicle.rb
133
136
  - lib/data/address.yaml
134
137
  - lib/data/bank.yaml
138
+ - lib/data/company.yaml
135
139
  - lib/data/name.yaml
140
+ - lib/data/person.yaml
141
+ - lib/data/vehicle.yaml
136
142
  homepage: http://rubygems.org/gems/cz_faker
137
143
  licenses:
138
144
  - MIT