1234567891011121314151617181920212223242526272829303132333435363738394041 |
- # coding=utf-8
- localized = True
- default_locale = 'en_GB'
- from .. import BaseProvider
- import string
- from string import ascii_uppercase
- import re
- class Provider(BaseProvider):
- """
- Provider for IBAN/BBAN: it generates valid (valid length, valid checksum)
- IBAN/BBANs for the given country. But the ids of the banks are random and
- not valid banks! Same for account numbers.
- """
- ALPHA = {c: str(ord(c) % 55) for c in string.ascii_uppercase}
- # see https://en.wikipedia.org/wiki/International_Bank_Account_Number
- bban_format = '????#############'
- country_code = 'GB'
- def bank_country(self):
- return self.country_code
- def bban(self):
- temp = re.sub(r'\?',
- lambda x: self.random_element(ascii_uppercase),
- self.bban_format)
- return self.numerify(temp)
- def iban(self):
- bban = self.bban()
- check = bban + self.country_code + '00'
- check = int(''.join(self.ALPHA.get(c, c) for c in check))
- check = 98 - (check % 97)
- check = str(check).zfill(2)
- return self.country_code + check + bban
|