tn_validator 0.1.2

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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/tn_validator.rb +72 -0
  3. metadata +44 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 11db9731870b3738a37a05963c8f00128404c858
4
+ data.tar.gz: f0010f86e7f73c58d619669a925c298528db6985
5
+ SHA512:
6
+ metadata.gz: bc8e92e9f6b8c49b68113dfdcc37e05d35d1b54b50227bde51be1d01950fa96bb0a7627fdf79dce542a9b59d8c344b079837bd33978a076a33f448eda8433304
7
+ data.tar.gz: 40a23a74bd65a7d7f162440f87f16c3e35a73b40600db597f9e420d9d96e19a622440f4a00bee831dfb09bf5e00a6d12f633642e31e4b9d2e87992a65f44e202
@@ -0,0 +1,72 @@
1
+ module TN
2
+
3
+ class Validator
4
+
5
+ MASK = /(?<prefix>[a-z]{2})(?<number>\d{8})(?<crc>\d)(?<suffix>[a-z]{2})/i
6
+ class << self
7
+
8
+ def valid? number
9
+ r = check number
10
+ { result: r == :OK, code: r, msg: Message.msg(r)}
11
+
12
+ end
13
+ def calc_crc number
14
+ crc =
15
+ number[0].to_i * 8 +
16
+ number[1].to_i * 6 +
17
+ number[2].to_i * 4 +
18
+ number[3].to_i * 2 +
19
+ number[4].to_i * 3 +
20
+ number[5].to_i * 5 +
21
+ number[6].to_i * 9 +
22
+ number[7].to_i * 7
23
+ crc = crc % 11
24
+ 11 - crc
25
+ end
26
+ private
27
+ def check_length number
28
+ number.length == 13
29
+
30
+ end
31
+ def check_format number
32
+ v = number =~ MASK
33
+ end
34
+ def check_crc number
35
+ m =MASK.match number
36
+
37
+ m[:crc].to_s == calc_crc(m[:number]).to_s
38
+
39
+
40
+
41
+
42
+ end
43
+ def check number
44
+ return :BAD_LENGTH unless check_length number
45
+ return :BAD_FORMAT unless check_format number
46
+ return :BAD_CRC unless check_crc number
47
+
48
+ return :OK
49
+
50
+ end
51
+ end
52
+ end
53
+ class Message
54
+
55
+ class << self
56
+ def msg code
57
+ case code
58
+ when :OK
59
+ 'ok'
60
+ when :BAD_FORMAT
61
+ 'Number format is bad. It must be XX123456789XX'
62
+ when :BAD_LENGTH
63
+ 'Number length is wrong. It must be 13 letters'
64
+ when :BAD_CRC
65
+ 'Incorrect crc number'
66
+ else
67
+ ''
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
metadata ADDED
@@ -0,0 +1,44 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tn_validator
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
5
+ platform: ruby
6
+ authors:
7
+ - Max Nedelchev
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-12-16 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Simple tracking number validator
14
+ email: max.nedelchev@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/tn_validator.rb
20
+ homepage: https://github.com/ssnake/tn_validator
21
+ licenses:
22
+ - MIT
23
+ metadata: {}
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ requirements: []
39
+ rubyforge_project:
40
+ rubygems_version: 2.2.0
41
+ signing_key:
42
+ specification_version: 4
43
+ summary: tracking number validator
44
+ test_files: []