class Ibanvalidator::IBAN

Attributes

errors[RW]

Public Class Methods

canonicalize_code( code ) click to toggle source
# File lib/ibanvalidator/iban.rb, line 50
def self.canonicalize_code( code )
  code.to_s.strip.gsub(/\s+/, '').upcase
end
default_rules() click to toggle source

Load and cache the default rules from rules.yml

# File lib/ibanvalidator/iban.rb, line 55
def self.default_rules
  Ibanvalidator.default_rules 
end
from_local(country_code, data) click to toggle source
# File lib/ibanvalidator/iban.rb, line 59
def self.from_local(country_code, data)
  Conversion.local2iban country_code, data
end
new( code ) click to toggle source
# File lib/ibanvalidator/iban.rb, line 12
def initialize( code )
  @code = IBAN.canonicalize_code(code)
end
valid?( code, rules = nil ) click to toggle source

quick_check Ibanvalidator::IBAN.valid?(“DE89370400440532013000”)

# File lib/ibanvalidator/iban.rb, line 8
def self.valid?( code, rules = nil )
  new(code).valid?(rules)
end

Public Instance Methods

bban() click to toggle source
# File lib/ibanvalidator/iban.rb, line 40
def bban
  @code[4..-1]
end
check_digits() click to toggle source
# File lib/ibanvalidator/iban.rb, line 36
def check_digits
  @code[2..3]
end
code() click to toggle source

The code in canonical form, suitable for storing in a database or sending over the wire

# File lib/ibanvalidator/iban.rb, line 28
def code
  @code
end
country_code() click to toggle source
# File lib/ibanvalidator/iban.rb, line 32
 def country_code
  @code[0..1]
end
numerify() click to toggle source
# File lib/ibanvalidator/iban.rb, line 103
def numerify
  #Diese setzt sich aus
  #BBAN (in Deutschland z. B. 18 Stellen) + Länderkürzel kodiert + Prüfsumme zusammen.
  #Dabei werden die beiden Buchstaben des Länderkürzels sowie weitere etwa in der Kontonummer enthaltene Buchstaben durch ihre Position im lateinischen Alphabet + 9 ersetzt
  #(A = 10, B = 11, …, Z = 35).
  numerified = ""
  (@code[4..-1] + @code[0..3]).each_byte do |byte|
    numerified += case byte
    # 0..9
    when 48..57 then byte.chr
    # 'A'..'Z'
    when 65..90 then (byte - 55).to_s # 55 = 'A'.ord + 10
    else
      raise RuntimeError.new("Unexpected byte '#{byte}' in IBAN code '#{prettify}'")
    end
  end
  numerified
end
prettify() click to toggle source

The IBAN code in a human-readable format

# File lib/ibanvalidator/iban.rb, line 73
def prettify
  @code.gsub(/(.{4})/, '\1 ').strip
end
sepa_scheme?() click to toggle source
# File lib/ibanvalidator/iban.rb, line 45
def sepa_scheme?
  Ibanvalidator.sepa_countries.include? country_code
end
to_local(leading_zero=false) click to toggle source

mit ignore_zero fasle werdnen die führenden nullen mit ausgegeben

# File lib/ibanvalidator/iban.rb, line 64
def to_local(leading_zero=false)
  Conversion.iban2local country_code, bban, leading_zero
end
to_s() click to toggle source
# File lib/ibanvalidator/iban.rb, line 68
def to_s
  "#<#{self.class}: #{prettify}>"
end
valid?(rules = nil) click to toggle source

instanz

# File lib/ibanvalidator/iban.rb, line 21
def valid?(rules = nil)
  errors(rules).empty?
end
valid_check_digits?() click to toggle source
Pruefdsummen siehe https://de.wikipedia.org/wiki/IBAN#Validierung_der_Pr.C3.BCfsum

Nun wird der Rest berechnet, der sich beim ganzzahligen Teilen der Zahl durch 97 ergibt (Modulo 97).

# File lib/ibanvalidator/iban.rb, line 98
def valid_check_digits?
  ##Das Ergebnis muss 1 sein, ansonsten ist die IBAN falsch.
  numerify.to_i % 97 == 1
end
validation_errors( rules = nil ) click to toggle source
# File lib/ibanvalidator/iban.rb, line 77
def validation_errors( rules = nil )
  errors = []
  return [:iban_too_short] if @code.size < 5
  return [:iban_too_long] if @code.size > 34
  return [:iban_bad_chars] unless @code =~ /^[A-Z0-9]+$/
  errors += validation_errors_against_rules( rules || Ibanvalidator.default_rules )
  errors << :iban_bad_check_digits unless valid_check_digits?
  errors
end
validation_errors_against_rules( rules ) click to toggle source
# File lib/ibanvalidator/iban.rb, line 88
def validation_errors_against_rules( rules )
  errors = []
  return [:iban_unknown_country_code] if rules[country_code].nil?
  errors << :iban_bad_length if rules[country_code]["length"] != @code.size
  errors << :iban_bad_format unless bban =~ rules[country_code]["bban_pattern"]
  errors
end