gpav 0.0.1

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