Class: Orgnummer

Inherits:
Object
  • Object
show all
Defined in:
lib/orgnummer.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(number) ⇒ Orgnummer

Returns a new instance of Orgnummer.



6
7
8
9
10
11
12
13
14
# File 'lib/orgnummer.rb', line 6

def initialize(number)
  @number = number.to_s
  if !@number.nil? && !@number.empty?
    # hyphen is ok, but remove it to pass validation algorithm
    @number = @number.gsub(/-/, '')
    # strip, we are kind and helpful
    @number = @number.strip
  end
end

Instance Attribute Details

#numberObject (readonly)

Returns the value of attribute number.



4
5
6
# File 'lib/orgnummer.rb', line 4

def number
  @number
end

Instance Method Details

#eql?(orgnummer) ⇒ Boolean Also known as: ==

Returns:

  • (Boolean)


47
48
49
50
# File 'lib/orgnummer.rb', line 47

def eql?(orgnummer)
  self.class.equal?(orgnummer.class) &&
      number == orgnummer.number
end

#hashObject



54
55
56
# File 'lib/orgnummer.rb', line 54

def hash
  number.hash
end

#to_sObject



39
40
41
# File 'lib/orgnummer.rb', line 39

def to_s
  self.valid? ? @number[0..5] + '-' + @number[6..10] : "Not a valid number: #{@number}"
end

#type_of_organizationObject



43
44
45
# File 'lib/orgnummer.rb', line 43

def type_of_organization
  valid? ? get_type_from_first_char : :odefinierat
end

#valid?Boolean

Returns:

  • (Boolean)


16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/orgnummer.rb', line 16

def valid?
  valid = false

  if !@number.nil? && !@number.empty?

    if (@number =~/\A\d{10}\z/) == 0
      multiplier = 2
      sum = 0

      @number[0...9].each_char do |n|
        part = (n.to_i * multiplier).to_s
        sum += part.length == 1 ? part.to_i : part[0].to_i + part[1].to_i
        multiplier = multiplier == 1 ? 2 : 1
      end

      checksum = (10 - sum.modulo(10)).modulo(10)

      valid = checksum == @number[-1, 1].to_i
    end
  end
  valid
end