Sha256: c5b460ad01fc2f74928f1369e57f38d9aaec34979745e2ffd6a8916f215a776f

Contents?: true

Size: 851 Bytes

Versions: 26

Compression:

Stored size: 851 Bytes

Contents

# frozen_string_literal: true

class MiniDefender::Rules::Iban < MiniDefender::Rule
  LENGTH_MATRIX = {
    'SA' => 24
  }

  def self.signature
    'iban'
  end

  def coerce(value)
    value.to_s.upcase.gsub(/\s/, '')
  end

  def passes?(attribute, value, validator)
    value = coerce(value)
    value.match?(/[A-Z]{2}\d+/i) && valid_length?(value) && valid_checksum?(value)
  end

  def valid_checksum?(iban)
    iban = "#{iban[4..]}#{letter_code(iban[0])}#{letter_code(iban[1])}#{iban[2..3]}".to_i
    iban % 97 === 1
  end

  def valid_length?(iban)
    iban.length == (LENGTH_MATRIX[iban[0..1]] || iban.length)
  end

  def message(attribute, value, validator)
    "The value should be a valid IBAN."
  end

  private

  def letter_code(letter)
    # letter is assumed to be an upcase ASCII alphabet letter (A-Z)
    letter.ord - 55
  end
end

Version data entries

26 entries across 26 versions & 1 rubygems

Version Path
mini_defender-0.5.6 lib/mini_defender/rules/iban.rb
mini_defender-0.5.5 lib/mini_defender/rules/iban.rb
mini_defender-0.5.4 lib/mini_defender/rules/iban.rb
mini_defender-0.5.3 lib/mini_defender/rules/iban.rb
mini_defender-0.5.2 lib/mini_defender/rules/iban.rb
mini_defender-0.5.1 lib/mini_defender/rules/iban.rb
mini_defender-0.5.0 lib/mini_defender/rules/iban.rb
mini_defender-0.4.1 lib/mini_defender/rules/iban.rb
mini_defender-0.4.0 lib/mini_defender/rules/iban.rb
mini_defender-0.3.14 lib/mini_defender/rules/iban.rb
mini_defender-0.3.13 lib/mini_defender/rules/iban.rb
mini_defender-0.3.12 lib/mini_defender/rules/iban.rb
mini_defender-0.3.11 lib/mini_defender/rules/iban.rb
mini_defender-0.3.10 lib/mini_defender/rules/iban.rb
mini_defender-0.3.9 lib/mini_defender/rules/iban.rb
mini_defender-0.3.8 lib/mini_defender/rules/iban.rb
mini_defender-0.3.7 lib/mini_defender/rules/iban.rb
mini_defender-0.3.6 lib/mini_defender/rules/iban.rb
mini_defender-0.3.5 lib/mini_defender/rules/iban.rb
mini_defender-0.3.2 lib/mini_defender/rules/iban.rb