gpav 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/gpav.rb +4 -0
- data/lib/validators/afm.rb +25 -0
- data/lib/validators/amka.rb +18 -0
- data/lib/validators/cheque.rb +75 -0
- data/lib/validators/iban.rb +34 -0
- metadata +48 -0
checksums.yaml
ADDED
@@ -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
|
data/lib/gpav.rb
ADDED
@@ -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: []
|