cz_faker 0.0.1 → 0.0.3

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