magick_numbers 0.1.3
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.
- data/.gitignore +5 -0
- data/Gemfile +5 -0
- data/README.markdown +0 -0
- data/Rakefile +2 -0
- data/lib/magick_numbers/base.rb +40 -0
- data/lib/magick_numbers/nip.rb +32 -0
- data/lib/magick_numbers/nip_number.rb +0 -0
- data/lib/magick_numbers/pesel.rb +20 -0
- data/lib/magick_numbers/regon.rb +22 -0
- data/lib/magick_numbers/regon14.rb +14 -0
- data/lib/magick_numbers/regon9.rb +15 -0
- data/lib/magick_numbers/version.rb +3 -0
- data/lib/magick_numbers.rb +1 -0
- data/magick_numbers.gemspec +21 -0
- data/spec/nip_spec.rb +21 -0
- data/spec/pesel_spec.rb +21 -0
- data/spec/regon_spec.rb +21 -0
- data/spec/spec_helper.rb +3 -0
- metadata +77 -0
data/Gemfile
ADDED
data/README.markdown
ADDED
|
File without changes
|
data/Rakefile
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
module MagickNumbers
|
|
2
|
+
|
|
3
|
+
class Base
|
|
4
|
+
|
|
5
|
+
attr_reader :magick_number, :regexp, :mask, :modulo, :length, :magick_array
|
|
6
|
+
|
|
7
|
+
def initialize(num)
|
|
8
|
+
@magick_number = num.to_s.gsub('-', '')
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def valid?
|
|
12
|
+
validate
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def validate
|
|
16
|
+
validate_regexp && validate_length && validate_sum_control
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def validate_regexp
|
|
20
|
+
regexp =~ magick_number
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def validate_length
|
|
24
|
+
magick_number.size == length
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def validate_sum_control
|
|
28
|
+
mod = checksum % modulo
|
|
29
|
+
mod = 0 if mod == 10
|
|
30
|
+
mod === magick_array.shift
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def checksum
|
|
34
|
+
@magick_array = magick_number.split( "").collect &:to_i
|
|
35
|
+
checksum = mask.inject(0) {|sum, weight| sum + weight * magick_array.shift}
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
module MagickNumbers
|
|
2
|
+
class Nip < MagickNumbers::Base
|
|
3
|
+
|
|
4
|
+
def initialize(num)
|
|
5
|
+
super(num)
|
|
6
|
+
@mask = [ 6, 5, 7, 2, 3, 4, 5, 6, 7]
|
|
7
|
+
@modulo = 11
|
|
8
|
+
@regexp = /^(PL)?[0-9]*/
|
|
9
|
+
# @magick_number = num.to_s.gsub('-', '')
|
|
10
|
+
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def validate_length
|
|
16
|
+
@magick_number.size == (international? ? 12 : 10)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def international?
|
|
20
|
+
/^PL/ =~ @magick_number
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def validate_sum_control
|
|
24
|
+
magick_number.slice!(0..1) if international?
|
|
25
|
+
mod = checksum % modulo
|
|
26
|
+
mod === magick_array.shift
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
end
|
|
File without changes
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module MagickNumbers
|
|
2
|
+
class Pesel < MagickNumbers::Base
|
|
3
|
+
|
|
4
|
+
def initialize(num)
|
|
5
|
+
super num
|
|
6
|
+
@mask = [ 1, 3, 7, 9, 1, 3, 7, 9, 1, 3]
|
|
7
|
+
@modulo = 10
|
|
8
|
+
@regexp = /\d{11}/
|
|
9
|
+
@length = 11
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def validate_sum_control
|
|
13
|
+
mod = checksum % modulo
|
|
14
|
+
mod = 10 - mod
|
|
15
|
+
mod = 0 if mod == 10
|
|
16
|
+
mod === magick_array.shift
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module MagickNumbers
|
|
2
|
+
class Regon
|
|
3
|
+
|
|
4
|
+
def initialize(num)
|
|
5
|
+
@factory = if(/^\d{9}$/ =~ num)
|
|
6
|
+
Regon9.new num
|
|
7
|
+
elsif(/^\d{14}$/ =~ num)
|
|
8
|
+
Regon14.new num
|
|
9
|
+
else
|
|
10
|
+
nil
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def valid?
|
|
16
|
+
return @factory.valid? if @factory
|
|
17
|
+
false
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Dir[File.expand_path(File.dirname(__FILE__) + '/magick_numbers/*.rb')].each {|f| require f}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
|
3
|
+
require "magick_numbers/version"
|
|
4
|
+
|
|
5
|
+
Gem::Specification.new do |s|
|
|
6
|
+
s.name = "magick_numbers"
|
|
7
|
+
s.version = MagickNumbers::VERSION
|
|
8
|
+
s.platform = Gem::Platform::RUBY
|
|
9
|
+
s.authors = ["Mariusz Nosinski"]
|
|
10
|
+
s.email = ["marioosh@5dots.pl"]
|
|
11
|
+
s.homepage = "http://github.com/marioosh/magick_numbers"
|
|
12
|
+
s.summary = %q{Basic library to validate numbers like PESEL, NIP, etc}
|
|
13
|
+
s.description = %q{Magick numbers validates popular numbers like polish PESEL, NIP, REGON, or global ISBN, EAN, etc.}
|
|
14
|
+
|
|
15
|
+
s.rubyforge_project = "magick_numbers"
|
|
16
|
+
|
|
17
|
+
s.files = `git ls-files`.split("\n")
|
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
|
20
|
+
s.require_paths = ["lib"]
|
|
21
|
+
end
|
data/spec/nip_spec.rb
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'rspec'
|
|
3
|
+
|
|
4
|
+
describe "Nip" do
|
|
5
|
+
|
|
6
|
+
it "should be valid"do
|
|
7
|
+
valid_numbers = %w[123-456-32-18 1234563218 123-45-63-218 PL123-456-32-18]
|
|
8
|
+
valid_numbers.each do |n|
|
|
9
|
+
nip = MagickNumbers::Nip.new(n)
|
|
10
|
+
nip.should be_valid
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "should be invalid" do
|
|
15
|
+
invalid_numbers = %w[PL5912158688 PP5911158688 591-116-86-88 591-11-48-688 PL_591-115-86-88 PL591 591-11-58-6887]
|
|
16
|
+
invalid_numbers.each do |n|
|
|
17
|
+
nip = MagickNumbers::Nip.new(n)
|
|
18
|
+
nip.should_not be_valid
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
data/spec/pesel_spec.rb
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'rspec'
|
|
3
|
+
|
|
4
|
+
describe "Pesel" do
|
|
5
|
+
|
|
6
|
+
it "should be valid"do
|
|
7
|
+
valid_numbers = %w[44051401359 02070803628]
|
|
8
|
+
valid_numbers.each do |n|
|
|
9
|
+
pesel = MagickNumbers::Pesel.new(n)
|
|
10
|
+
pesel.should be_valid
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "should be invalid" do
|
|
15
|
+
invalid_numbers = %w[44051401358 02070803629]
|
|
16
|
+
invalid_numbers.each do |n|
|
|
17
|
+
pesel = MagickNumbers::Pesel.new(n)
|
|
18
|
+
pesel.should_not be_valid
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
data/spec/regon_spec.rb
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'rspec'
|
|
3
|
+
|
|
4
|
+
describe "Regon" do
|
|
5
|
+
|
|
6
|
+
it "should be valid"do
|
|
7
|
+
valid_numbers = %w[192598184 123456785 12345678512347]
|
|
8
|
+
valid_numbers.each do |n|
|
|
9
|
+
regon = MagickNumbers::Regon.new(n)
|
|
10
|
+
regon.should be_valid
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "should be invalid" do
|
|
15
|
+
invalid_numbers = %w[192598284 1925982843 19259828 123456786 12345638512347]
|
|
16
|
+
invalid_numbers.each do |n|
|
|
17
|
+
regon = MagickNumbers::Regon.new(n)
|
|
18
|
+
regon.should_not be_valid
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: magick_numbers
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
prerelease:
|
|
5
|
+
version: 0.1.3
|
|
6
|
+
platform: ruby
|
|
7
|
+
authors:
|
|
8
|
+
- Mariusz Nosinski
|
|
9
|
+
autorequire:
|
|
10
|
+
bindir: bin
|
|
11
|
+
cert_chain: []
|
|
12
|
+
|
|
13
|
+
date: 2011-03-31 00:00:00 +02:00
|
|
14
|
+
default_executable:
|
|
15
|
+
dependencies: []
|
|
16
|
+
|
|
17
|
+
description: Magick numbers validates popular numbers like polish PESEL, NIP, REGON, or global ISBN, EAN, etc.
|
|
18
|
+
email:
|
|
19
|
+
- marioosh@5dots.pl
|
|
20
|
+
executables: []
|
|
21
|
+
|
|
22
|
+
extensions: []
|
|
23
|
+
|
|
24
|
+
extra_rdoc_files: []
|
|
25
|
+
|
|
26
|
+
files:
|
|
27
|
+
- .gitignore
|
|
28
|
+
- Gemfile
|
|
29
|
+
- README.markdown
|
|
30
|
+
- Rakefile
|
|
31
|
+
- lib/magick_numbers.rb
|
|
32
|
+
- lib/magick_numbers/base.rb
|
|
33
|
+
- lib/magick_numbers/nip.rb
|
|
34
|
+
- lib/magick_numbers/nip_number.rb
|
|
35
|
+
- lib/magick_numbers/pesel.rb
|
|
36
|
+
- lib/magick_numbers/regon.rb
|
|
37
|
+
- lib/magick_numbers/regon14.rb
|
|
38
|
+
- lib/magick_numbers/regon9.rb
|
|
39
|
+
- lib/magick_numbers/version.rb
|
|
40
|
+
- magick_numbers.gemspec
|
|
41
|
+
- spec/nip_spec.rb
|
|
42
|
+
- spec/pesel_spec.rb
|
|
43
|
+
- spec/regon_spec.rb
|
|
44
|
+
- spec/spec_helper.rb
|
|
45
|
+
has_rdoc: true
|
|
46
|
+
homepage: http://github.com/marioosh/magick_numbers
|
|
47
|
+
licenses: []
|
|
48
|
+
|
|
49
|
+
post_install_message:
|
|
50
|
+
rdoc_options: []
|
|
51
|
+
|
|
52
|
+
require_paths:
|
|
53
|
+
- lib
|
|
54
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
55
|
+
none: false
|
|
56
|
+
requirements:
|
|
57
|
+
- - ">="
|
|
58
|
+
- !ruby/object:Gem::Version
|
|
59
|
+
version: "0"
|
|
60
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
61
|
+
none: false
|
|
62
|
+
requirements:
|
|
63
|
+
- - ">="
|
|
64
|
+
- !ruby/object:Gem::Version
|
|
65
|
+
version: "0"
|
|
66
|
+
requirements: []
|
|
67
|
+
|
|
68
|
+
rubyforge_project: magick_numbers
|
|
69
|
+
rubygems_version: 1.6.2
|
|
70
|
+
signing_key:
|
|
71
|
+
specification_version: 3
|
|
72
|
+
summary: Basic library to validate numbers like PESEL, NIP, etc
|
|
73
|
+
test_files:
|
|
74
|
+
- spec/nip_spec.rb
|
|
75
|
+
- spec/pesel_spec.rb
|
|
76
|
+
- spec/regon_spec.rb
|
|
77
|
+
- spec/spec_helper.rb
|