hkid_validator 0.0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 19988b851b93e41145204dca16833ed52e2b00d5
4
+ data.tar.gz: 1f7930fbe3a138cb6b3db3b8ecb6eeec3475391d
5
+ SHA512:
6
+ metadata.gz: 5fee3bbe81a2a5066a1cfe26fd4efc22e01d6dcda925d22bcf78fa86a13ee008857aa9a4cbb25c4780965d759b62a17c81967022fda25c12fa167de900527431
7
+ data.tar.gz: 22de45a4dbb9cfc6c44d1a8f2a938ce8464bfff00dcd757b215cfa716eb6212ab86c1cf31e946423f478ff006a0907296a9418a169dd9da77ef63a7e96b8f988
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'hkid_validator'
4
+ puts HkidValidator.valid?(ARGV[0])
@@ -0,0 +1,48 @@
1
+ class HkidValidator
2
+ class << self
3
+ def valid?(number)
4
+ sanitized = number.scan(/\p{Alnum}+/).join.upcase
5
+
6
+ return false unless sanitized[-1] =~ /(\d+|A)/
7
+
8
+ unless (sanitized.length == 8 &&
9
+ sanitized[0] =~ /[A-Z]/ &&
10
+ sanitized[1...-1] =~ /\d+/) ||
11
+ (sanitized.length == 9 &&
12
+ sanitized[0] =~ /[A-Z]/ &&
13
+ sanitized[1] =~ /[A-Z]/ &&
14
+ sanitized[2...-1] =~ /\d+/)
15
+
16
+ return false
17
+ end
18
+
19
+ weighted_sum = 324
20
+ queue = sanitized.split('')[0...-1]
21
+
22
+ queue[0] = value_at_char(queue[0])
23
+ if sanitized.length == 9
24
+ queue[1] = value_at_char(queue[1])
25
+ end
26
+
27
+ while queue.length > 0
28
+ weighted_sum += queue.shift.to_i * (queue.length + 2)
29
+ end
30
+
31
+ remainder = weighted_sum % 11
32
+
33
+ if remainder == 0
34
+ return sanitized[-1].to_i == 0
35
+ elsif remainder == 1
36
+ return sanitized[-1] == 'A'
37
+ elsif remainder >= 2 && remainder <= 10
38
+ return sanitized[-1].to_i == (11 - remainder)
39
+ end
40
+ end
41
+
42
+ private
43
+
44
+ def value_at_char(char)
45
+ (char.ord - 'A'.ord + 10).to_s
46
+ end
47
+ end
48
+ end
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hkid_validator
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Dominic Wong
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-09-07 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: HKID validator
14
+ email: dominic.wong.617@gmail.com
15
+ executables:
16
+ - hkid_validator
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - bin/hkid_validator
21
+ - lib/hkid_validator.rb
22
+ homepage: http://rubygems.org/gems/hkid_validator
23
+ licenses:
24
+ - MIT
25
+ metadata: {}
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - '>='
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubyforge_project:
42
+ rubygems_version: 2.6.13
43
+ signing_key:
44
+ specification_version: 4
45
+ summary: A gem to validate HKID numbers
46
+ test_files: []