﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
19078	Polish IBAN field	bartosak@…	nobody	"I would like to add polish IBAN account number field 

{{{
from django.core.validators import EMPTY_VALUES
from django.forms import ValidationError, RegexField
from django.utils.translation import ugettext_lazy as _

class PLIBANField(RegexField):
    """"""
    Polish International Bank Account Number (IBAN) field

    For Polish IBAN validation algorithm see http://pl.wikipedia.org/wiki/International_Bank_Account_Number
    """"""
    default_error_messages = {
        'invalid': _('Enter a valid IBAN in PLXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX format'),
    }

    def __init__(self, max_length=40, min_length=28, *args, **kwargs):
        super(PLIBANField, self).__init__(r'^[0-9A-Za-z\-\s]{28,40}$',
                max_length, min_length, *args, **kwargs)

    def clean(self, value):
        """"""
        Strips - and spaces, performs country code and checksum validation
        """"""
        value = super(PLIBANField, self).clean(value)
        if value in EMPTY_VALUES:
            return u''
        value = value.replace('-','')
        value = value.replace(' ','')
        value = value.upper()
        if value[0:2] != 'PL':
            raise ValidationError(self.error_messages[_('Unknown country code')])
        numeric_format = ''
        for char in value[4:] + value[0:4]:
            if char.isalpha():
                numeric_format += str(ord(char) - 55)
            else:
                numeric_format += char
        if int(numeric_format) % 97 != 1:
            raise ValidationError(self.error_messages[_('Invalid checksum')])
        return value
}}}
"	New feature	closed	Forms	1.4	Normal	wontfix	polish IBAN	Łukasz Rekucki	Unreviewed	0	0	0	0	0	0
