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 +4 -4
- data/README.md +14 -8
- data/lib/codecal/version.rb +1 -1
- data/lib/codecal.rb +40 -10
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9a9497c1ebd3be3858b93cf5b998d449556a2db4
|
4
|
+
data.tar.gz: 8746807358f6365760509bf8f7d43c99d75a25f2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
92
|
+
codecal.get_currency_name(String)
|
data/lib/codecal/version.rb
CHANGED
data/lib/codecal.rb
CHANGED
@@ -2,11 +2,23 @@ require "codecal/version"
|
|
2
2
|
require_relative "./code"
|
3
3
|
|
4
4
|
module Codecal
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
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
|
-
|
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(
|
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(
|
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'
|
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
|
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.
|
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
|
11
|
+
date: 2018-06-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|