Class: Codecal::Calc
Constant Summary
collapse
- @@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']
Instance Method Summary
collapse
Methods included from Mask
#convert_masked_code_typo, #get_mask_offset, #mask_alphabet_include?, #mask_char, #mask_code, #un_mask_char, #unmask_code
Methods included from Modulo
#simple_code_calculate
Methods included from Validation
#all_digits?, #all_letters_or_digits?, #is_legal_mask?, #is_legal_masked_code?
Constructor Details
#initialize(mask_alphabet = nil) ⇒ Calc
Returns a new instance of Calc.
15
16
17
18
19
20
21
22
23
24
|
# File 'lib/codecal.rb', line 15
def initialize(mask_alphabet = nil)
if mask_alphabet.is_a?(String) &&
mask_alphabet.size > 26 &&
all_letters_or_digits?(mask_alphabet) &&
mask_alphabet.size == mask_alphabet.split('').uniq.size
@mask_alphabet = mask_alphabet.split('')
else
@mask_alphabet = @@MASK_ALPHABET
end
end
|
Instance Method Details
#code_generate_with_mask(mask, number) ⇒ Object
41
42
43
44
45
46
47
48
49
|
# File 'lib/codecal.rb', line 41
def code_generate_with_mask(mask, number)
errormsg = "mark should be string of letter or number and length should >= 5" unless is_legal_mask?(mask)
return {success:false, error: errormsg} if errormsg
result = simple_code_generate(number)
return result unless result[:success]
offset = get_mask_offset(mask)
{success:true, customer_code: mask_code(offset, result[:customer_code])}
end
|
#get_unmasked_code(mask, masked_code) ⇒ Object
69
70
71
72
73
74
75
76
77
|
# File 'lib/codecal.rb', line 69
def get_unmasked_code(mask, masked_code)
return false unless is_legal_masked_code?(masked_code)
return false unless is_legal_mask?(mask)
masked_code = convert_masked_code_typo(masked_code)
offset = get_mask_offset(mask)
code = unmask_code(offset, masked_code)
masked_code.size == code.size ? code : false
end
|
#simple_code_generate(number) ⇒ Object
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
# File 'lib/codecal.rb', line 26
def simple_code_generate(number)
errormsg = ""
if number == nil
errormsg += "parameter is nil. "
return {success:false, error: errormsg}
end
errormsg += "the type of the code to be encrypted should be Integer. " unless all_digits?(number.to_s)
if errormsg.size == 0
cal_array = (number.to_i.to_s).split("").map! {|i| i.to_i}
{success:true, customer_code: simple_code_calculate(cal_array) }
else
{success:false, error: errormsg}
end
end
|
#validate_masked_code(mask, masked_code) ⇒ Object
57
58
59
60
61
62
63
64
65
66
67
|
# File 'lib/codecal.rb', line 57
def validate_masked_code(mask, masked_code)
return false unless is_legal_masked_code?(masked_code)
return false unless is_legal_mask?(mask)
masked_code = convert_masked_code_typo(masked_code)
offset = get_mask_offset(mask)
result = simple_code_generate(unmask_code(offset, masked_code)[0..-2].to_i)
return false unless result[:success]
return masked_code == mask_code(offset, result[:customer_code])
end
|
#validate_simple_code(simple_code) ⇒ Object
51
52
53
54
55
|
# File 'lib/codecal.rb', line 51
def validate_simple_code(simple_code)
return false unless simple_code && simple_code.to_i > 0 && simple_code.size > 1
calcode = simple_code_calculate(simple_code[0..-2].split("").map! {|i| i.to_i})
return simple_code == calcode
end
|