module Ibandit::CheckDigit
Constants
- ITALIAN_ODD_MAPPING
Public Class Methods
Source
# File lib/ibandit/check_digit.rb, line 14 def self.iban(country_code, bban) chars = bban + country_code + "00" digits = chars.bytes.map do |byte| case byte when 48..57 then byte.chr # 0..9 when 65..90 then (byte - 55).to_s # A..Z else raise InvalidCharacterError, "Unexpected non-alphanumeric character '#{byte.chr}'" end end remainder = digits.join.to_i % 97 sprintf("%<check_digit>02d", check_digit: 98 - remainder) end
Source
# File lib/ibandit/check_digit.rb, line 29 def self.italian(string) scaled_values = string.chars.map.with_index do |char, index| if index.even? if ITALIAN_ODD_MAPPING.include?(char) ITALIAN_ODD_MAPPING[char] else raise InvalidCharacterError, "Unexpected character '#{char}'" end else case char.ord when 48..57 then char.to_i # 0..9 when 65..90 then char.ord - 65 # A..Z else raise InvalidCharacterError, "Unexpected character '#{char}'" end end end ((scaled_values.sum % 26) + 65).chr end