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.
- 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: []
|