codecal 0.3.10 → 0.4.0

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: 8c8aee3f860b9401cdc8235eeb24c488a62d4167
4
- data.tar.gz: ddec58a2ebd8be0a0aa177d87b7f8d21ba8371a3
3
+ metadata.gz: 9a9497c1ebd3be3858b93cf5b998d449556a2db4
4
+ data.tar.gz: 8746807358f6365760509bf8f7d43c99d75a25f2
5
5
  SHA512:
6
- metadata.gz: 8c28a2118e4c048668677cadd108add060fd4f313356ae0d17d48872ff0a396951faa1c0d62e2772afd1b79e8fd697be6510f20d1d7236d4aa0df1f47ab1fb8a
7
- data.tar.gz: 38fc88524672f4f97448baeeab5750da414ed8f538e5b184d0d4412082da5019e42e975994ee7f80e417f56b3954530d077f04a8cfacc57fc9681a0b7df740fc
6
+ metadata.gz: 1e574f8ec7fab16a439e042a1035aa294e4159ca9b64db0558698fbf75e2e6352aa7f0802727aa5c08be275800f7db599feef5a246b800fc551a8c926a90ceb0
7
+ data.tar.gz: 751d4f1609d91a2d0d7443b264ee2b91f210da0e29ef1617464faa6c9195ccf3822092a7006f08a4ce043d4b00849924eb41f9e9d5e3254496d992508745bb6a
data/README.md CHANGED
@@ -19,6 +19,12 @@ Or install it yourself as:
19
19
  ```
20
20
  require 'codecal'
21
21
 
22
+ codecal = Codecal::Calc.new()
23
+
24
+ # or initialize with mask_alphabet string which should only contain unique letter and number and length over 26
25
+
26
+ codecal = Codecal::Calc.new('fdsa32jkh89704lncmxzvrueopwytq')
27
+
22
28
  # Generate customer code for user account
23
29
  # Parameters:
24
30
  # number : Integer(<=9) -- code to be calculated and masked
@@ -27,7 +33,7 @@ require 'codecal'
27
33
  # success : boolean -- generate customer code success
28
34
  # customer code : String -- 16 numbers string when success == true
29
35
  # error : String -- error message of parameters when success == false
30
- Codecal.bank_customer_code_generate(number, currency)
36
+ codecal.bank_customer_code_generate(number, currency)
31
37
 
32
38
  # Generate simple code for account
33
39
  # Parameters:
@@ -36,7 +42,7 @@ Codecal.bank_customer_code_generate(number, currency)
36
42
  # success : boolean -- generate customer code success
37
43
  # customer code : String -- numbers(number.length + 1) string when success == true
38
44
  # error : String -- error message of parameters when success == false
39
- Codecal.simple_code_generate(number)
45
+ codecal.simple_code_generate(number)
40
46
 
41
47
  # Generate masked code for account
42
48
  # Parameters:
@@ -46,21 +52,21 @@ Codecal.simple_code_generate(number)
46
52
  # success : boolean -- generate customer code success
47
53
  # customer code : String -- combination of letter and number(number.length + 1) string when success == true
48
54
  # error : String -- error message of parameters when success == false
49
- Codecal.code_generate_with_mask(mask, number)
55
+ codecal.code_generate_with_mask(mask, number)
50
56
 
51
57
  # Validate customer code
52
58
  # Parameters:
53
59
  # customer_code : String
54
60
  # Return:
55
61
  # valid : boolean
56
- Codecal.validate_bank_customer_code(String)
62
+ codecal.validate_bank_customer_code(String)
57
63
 
58
64
  # Validate simple code
59
65
  # Parameters:
60
66
  # simple_code : String
61
67
  # Return:
62
68
  # valid : boolean
63
- Codecal.validate_simple_code(String)
69
+ codecal.validate_simple_code(String)
64
70
 
65
71
  # Validate masked code
66
72
  # Parameters:
@@ -68,7 +74,7 @@ Codecal.validate_simple_code(String)
68
74
  # masked_code : String(>=6)
69
75
  # Return:
70
76
  # valid : boolean
71
- Codecal.validate_masked_code(String)
77
+ codecal.validate_masked_code(String)
72
78
 
73
79
  # Get unmasked code
74
80
  # Parameters:
@@ -76,11 +82,11 @@ Codecal.validate_masked_code(String)
76
82
  # masked_code : String(>=6)
77
83
  # Return:
78
84
  # code : String(>=6) || false : boolean
79
- Codecal.get_unmasked_code(String)
85
+ codecal.get_unmasked_code(String)
80
86
 
81
87
  # Get currency name
82
88
  # Parameters:
83
89
  # currency_code : String(4)
84
90
  # Return:
85
91
  # currency name : String -- nil if not found
86
- Codecal.get_currency_name(String)
92
+ codecal.get_currency_name(String)
@@ -1,3 +1,3 @@
1
1
  module Codecal
2
- VERSION = "0.3.10"
2
+ VERSION = "0.4.0"
3
3
  end
data/lib/codecal.rb CHANGED
@@ -2,11 +2,23 @@ require "codecal/version"
2
2
  require_relative "./code"
3
3
 
4
4
  module Codecal
5
- @@BASE_ALPHABET = ['o','a','3','p','9','h','b','2','q','i','1','c','4','r','7','j','s','5','d','t','8','k','u','e','v','l','w','f','x','6','m','y','0','g','z','n']
6
- @@MASK_ALPHABET = ['a','4','p','9','h','r','7','q','c','3','b','2','j','s','6','d','t','8','k','u','e','l','v','f','w','x','5','m','y','g','z','n', 'i']
7
- @@generate_seed = [2,7,5,3,8,9,5,9,1,6,7,3,5]
8
- @@simple_seed = [5,4,6,2,3,1,5,4,6,2,3,1]
9
- class<<self
5
+
6
+ class Calc
7
+ @@MASK_ALPHABET = ['a','4','p','9','h','r','7','q','c','3','b','2','j','s','6','d','t','8','k','u','e','v','f','w','x','5','m','y','g','z','n']
8
+ @@generate_seed = [2,7,5,3,8,9,5,9,1,6,7,3,5]
9
+ @@simple_seed = [5,4,6,2,3,1,5,4,6,2,3,1]
10
+
11
+ def initialize(mask_alphabet = nil)
12
+ if mask_alphabet.is_a?(String) &&
13
+ mask_alphabet.size > 26 &&
14
+ all_letters_or_digits?(mask_alphabet) &&
15
+ mask_alphabet.size == mask_alphabet.split('').uniq.size
16
+ @mask_alphabet = mask_alphabet.split('')
17
+ else
18
+ @mask_alphabet = @@MASK_ALPHABET
19
+ end
20
+ end
21
+
10
22
  def bank_customer_code_generate(account_id, currency)
11
23
  errormsg = ""
12
24
  if account_id == nil || currency == nil
@@ -84,7 +96,7 @@ module Codecal
84
96
 
85
97
  offset = get_mask_offset(mask)
86
98
  code = unmask_code(offset, masked_code)
87
- all_digits?(code) ? code : false
99
+ masked_code.size == code.size ? code : false
88
100
  end
89
101
 
90
102
  def get_currency_name(currency_code)
@@ -106,7 +118,7 @@ module Codecal
106
118
  def mask_code(offset, code)
107
119
  code_arr = code.size > 5 ? code.split("") : ("%06d" % code).split("")
108
120
  masked_code = code_arr.each_with_index.inject([]) do |code, (c, i)|
109
- code.push(@@MASK_ALPHABET[(@@BASE_ALPHABET.find_index(c) + offset[ i % offset.size ]) % @@MASK_ALPHABET.size])
121
+ code.push(mask_char(c, offset[ i % offset.size ]))
110
122
  end
111
123
  start_code = masked_code.pop
112
124
  masked_code.unshift(start_code).join
@@ -115,14 +127,14 @@ module Codecal
115
127
  def unmask_code(offset, masked_code)
116
128
  masked_code = masked_code[1..-1] + masked_code[0]
117
129
  code = masked_code.downcase.split("").each_with_index.inject([]) do |code, (c, i)|
118
- code.push(@@BASE_ALPHABET[(@@MASK_ALPHABET.find_index(c) - offset[ i % offset.size ]) % @@MASK_ALPHABET.size])
130
+ code.push(un_mask_char(c, offset[ i % offset.size ]))
119
131
  end
120
132
  code.join
121
133
  end
122
134
 
123
135
  def get_mask_offset(mask)
124
136
  mask.split("").inject([]) do |offset,c|
125
- [[*'a'..'z', *'0'..'9'], [*'A'..'Z', *'0'..'9']].each do |m|
137
+ [[*'a'..'z'], [*'A'..'Z'], [*'0'..'9']].each do |m|
126
138
  if m.include?(c)
127
139
  offset.push(m.find_index(c))
128
140
  break
@@ -147,9 +159,27 @@ module Codecal
147
159
 
148
160
  def is_legal_masked_code?(masked_code)
149
161
  return false unless masked_code.is_a?(String) && masked_code.size > 5
150
- return false unless masked_code[/[a-np-zA-NP-Z1-9]+/] == masked_code
162
+ return false unless mask_alphabet_include?(masked_code)
151
163
  return true
152
164
  end
153
165
 
166
+ def mask_alphabet_include?(code)
167
+ code.split('').each do |c|
168
+ return false unless @mask_alphabet.include?(c)
169
+ end
170
+ true
171
+ end
172
+
173
+ def mask_char(char, offset)
174
+ if all_digits?(char) && char.size == 1
175
+ @mask_alphabet[(@mask_alphabet.find_index(@mask_alphabet[char.to_i]) + offset) % @mask_alphabet.size]
176
+ end
177
+ end
178
+
179
+ def un_mask_char(char, offset)
180
+ if mask_alphabet_include?(char)
181
+ (@mask_alphabet.find_index(char) - offset) % @mask_alphabet.size
182
+ end
183
+ end
154
184
  end
155
185
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codecal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.10
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roger Fang
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-05-22 00:00:00.000000000 Z
11
+ date: 2018-06-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler