import re


def isiban(value):
    """
    Return whether or not given value is a valid IBAN code.
    If the value is a valid IBAN, this function returns ``True``, otherwise ``False``.

    Examples::

        >>> isiban('DE29100500001061045672')
        True

        >>> isiban('NO9186011117947')
        False

    :param value: string to validate IBAN code
    """
    pattern = re.compile(r'^[A-Z]{2}[0-9]{2}[A-Z0-9]{11,30}$')
    cleaned_value = value.replace(' ', '').replace('\t', '')
    iban = cleaned_value[4:] + cleaned_value[:4]
    if not pattern.match(cleaned_value):
        return False
    digits = int(''.join(str(int(ch, 36)) for ch in iban))  # BASE 36: 0..9,A..Z -> 0..35
    return digits % 97 == 1