gpav 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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 71711ea2f57aa05aa924fbf68eb1dd07fd005a0d
4
+ data.tar.gz: 7ce057f6ee4de9e60ef945bc6b4d1575c52fb277
5
+ SHA512:
6
+ metadata.gz: 0d40f3972634be5c29a18a71cd3a32c6d49dbed8777684153e6c410acebc47aa4f24dccb658dbf4724b5d47c522b88313b07019b0e61a513ce474adecb05ad85
7
+ data.tar.gz: cc3ef5583b0016f64428441bf1478bc3bb24bab6f7a3680a84ef7a6a9fe28081e94c3845725a94c81875d19548a0286e2bc9d401327a58931dd27c4fc21a3fbf
@@ -0,0 +1,4 @@
1
+ require 'validators/afm'
2
+ require 'validators/amka'
3
+ require 'validators/cheque'
4
+ require 'validators/iban'
@@ -0,0 +1,25 @@
1
+ class Afm
2
+ def self.valid?(afm) #9 chars, string
3
+
4
+ @afm = afm.to_s
5
+
6
+ return false if @afm.length != 9 # length == 9
7
+ return false if not @afm =~ /\A[0-9]{9}\Z/ # only digits
8
+ return false if @afm.to_i == 0 # do not allow all digits zero
9
+
10
+ y = @afm[-1].to_i # rest / ninth digit
11
+ s = 0 # runnning sum
12
+ pow2 = 2 # 2 power cache
13
+
14
+ 7.downto(0) do |i|
15
+ s += pow2 * @afm[i].to_i
16
+ pow2 = pow2 * 2
17
+ end
18
+
19
+ s = s % 11
20
+ s = 0 if s == 10
21
+
22
+ return s == y
23
+
24
+ end
25
+ end
@@ -0,0 +1,18 @@
1
+ class Amka
2
+
3
+ def self.valid?(amka) # 11 char string
4
+
5
+ @amka = amka.to_s
6
+
7
+ return false unless @amka.length == 11
8
+ return false unless @amka =~ /\A[0-9]{11}\Z/
9
+ return false if @amka.to_i == 0 # do not allow all digits zero
10
+
11
+ @amka.each_char.with_index.inject(0) do |sum,(value,index)|
12
+ v = value.to_i
13
+ sum + v + (index.odd? ? (v - ( (v>4) ? 9 : 0)) : 0)
14
+ end % 10 == 0
15
+
16
+ end
17
+
18
+ end
@@ -0,0 +1,75 @@
1
+ class Cheque
2
+ attr_reader :number
3
+
4
+ def initialize( number )
5
+ @number = number.to_s
6
+ end
7
+
8
+ def check_digit
9
+ i=9
10
+ sum = 0
11
+ @number.each_char{|c|
12
+ sum += c.to_i*i
13
+ i-=1
14
+ }
15
+ # return sum
16
+ y = sum % 11
17
+ result =
18
+ case y
19
+ when 1 then 0
20
+ when 0 then 1
21
+ else 11-y
22
+ end
23
+ end
24
+
25
+ def cheque_number
26
+ @number + '-' + check_digit.to_s
27
+ end
28
+
29
+ def self.valid?(chequenumber)
30
+
31
+ @chequenumber =chequenumber.to_s
32
+
33
+ return false unless @chequenumber.length == 10
34
+ return false if not @chequenumber =~ /\A[0-9]{8}-[0-9]\Z/
35
+
36
+ @chequenumber[-1].to_i == Cheque.new(@chequenumber[0..7]).check_digit
37
+
38
+ end
39
+
40
+ end
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
@@ -0,0 +1,34 @@
1
+ class Iban
2
+
3
+ def valid?(iban)
4
+
5
+ @iban = iban.to_s
6
+
7
+ return false unless @iban.length == 27
8
+ return false unless @iban =~ /\A[a-zA-Z]{2}[0-9]{25}\Z/
9
+
10
+
11
+ # rotate 4
12
+ #change letters to numbers: A=10 --> Z=35
13
+ #divide with 97 mod == 1
14
+
15
+ (@iban[4..27] + char_to_numbers(@iban[0]) + char_to_numbers(@iban[1]) + @iban[2..3]).to_i % 97 == 1
16
+
17
+ end
18
+
19
+ def char_to_numbers(char)
20
+
21
+ # iban characters to number transformation table
22
+ #
23
+ # A=10 F=15 K=20 P=25 U=30 Z=35
24
+ # B=11 G=16 L=21 Q=26 V=31
25
+ # C=12 H=17 M=22 R=27 W=32
26
+ # D=13 I=18 N=23 S=28 X=33
27
+ # E=14 J=19 O=24 T=29 Y=34
28
+ #
29
+
30
+ (char.upcase.ord - 'a'.upcase.ord + 10).to_s
31
+
32
+ end
33
+
34
+ end
metadata ADDED
@@ -0,0 +1,48 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gpav
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Michail Pantelelis
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-05-03 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Validators for AFM, Cheque numbers, AMKA and IBAN
14
+ email: mpantel@aegean.gr
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/gpav.rb
20
+ - lib/validators/afm.rb
21
+ - lib/validators/amka.rb
22
+ - lib/validators/cheque.rb
23
+ - lib/validators/iban.rb
24
+ homepage: https://github.com/mpantel/gpav
25
+ licenses:
26
+ - MIT
27
+ metadata: {}
28
+ post_install_message:
29
+ rdoc_options: []
30
+ require_paths:
31
+ - lib
32
+ required_ruby_version: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ required_rubygems_version: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ requirements: []
43
+ rubyforge_project:
44
+ rubygems_version: 2.2.3
45
+ signing_key:
46
+ specification_version: 4
47
+ summary: Greek Publc Administration Validators
48
+ test_files: []