Skip to content

Instantly share code, notes, and snippets.

@joona
Created November 23, 2010 13:04
Show Gist options
  • Save joona/711719 to your computer and use it in GitHub Desktop.
Save joona/711719 to your computer and use it in GitHub Desktop.
quick hack for BBAN <=> IBAN conversion for Finnish bank account numbers, attached to String-class.
$BANK_PREFIXES = [1, 2, 31, 33, 34, 36, 37, 38, 39, 4, 5, 6, 8]
class String
# converts bank account to numeric format
def to_account
if self.include?('-')
return self.sub(/\-(\d)(\d+)$/, "\\1" << '0' * ((14 - self.length)+1) << "\\2").to_i if ['4','5'].include?(self[0..0])
return self.sub('-', '0' * ((14 - self.length) + 1)).to_i
end
self.to_i
end
# converts Finnish bank account number to IBAN
def to_iban
hash = 98 - ((self.to_account.to_s + '151800').to_i % 97)
"FI%02d%d" % [hash, self.to_account]
end
# converts Finnish IBAN account to numeric BBAN
def to_bban
return self[4..-1].to_i if self.include?('FI')
self.to_i
end
# validate IBAN
def valid_iban?
(("%s%s" % [self[4..-1], self[0..3]]).sub('FI', '1518').to_i % 97) == 1
end
# validate BBAN
def valid_bban?
return false if $BANK_PREFIXES.reject {|x| x unless self =~ /^#{x}/ }.nitems == 0
self.to_bban.to_s[-1..-1].to_i == self.to_bban.to_s[0..-2].split('').reverse.enum_for(:each_with_index).collect { |o, i| o.to_i*[2,1][i%2] }.to_s.split('').inject(0){|s, i| s - i.to_i } % 10
end
end
@loony12370
Copy link

comment ca se passe bien ?tous va au mieux?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment