tn_validator 0.1.2

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