コード例 #1
0
def validate(number):
    """Checks to see if the number provided is a valid VAT number. This
    checks the length, formatting and check digit."""
    number = compact(number)
    if not all(x in _alphabet for x in number[:2]):
        raise InvalidFormat()
    if not number[2:].isdigit():
        raise InvalidFormat()
    if len(number) != 11:
        raise InvalidLength()
    if number[2:5] != '000':
        # numbers from Monaco are valid TVA but not SIREN
        siren.validate(number[2:])
    if number.isdigit():
        # all-numeric digits
        if int(number[:2]) != (int(number[2:] + '12') % 97):
            raise InvalidChecksum()
    else:
        # one of the first two digits isn't a number
        if number[0].isdigit():
            check = (_alphabet.index(number[0]) * 24 +
                     _alphabet.index(number[1]) - 10)
        else:
            check = (_alphabet.index(number[0]) * 34 +
                     _alphabet.index(number[1]) - 100)
        if (int(number[2:]) + 1 + check // 11) % 11 != (check % 11):
            raise InvalidChecksum()
    return number
コード例 #2
0
ファイル: tva.py プロジェクト: arthurdejong/python-stdnum
def validate(number):
    """Check if the number is a valid VAT number. This checks the length,
    formatting and check digit."""
    number = compact(number)
    if not all(x in _alphabet for x in number[:2]):
        raise InvalidFormat()
    if not isdigits(number[2:]):
        raise InvalidFormat()
    if len(number) != 11:
        raise InvalidLength()
    if number[2:5] != '000':
        # numbers from Monaco are valid TVA but not SIREN
        siren.validate(number[2:])
    if isdigits(number):
        # all-numeric digits
        if int(number[:2]) != (int(number[2:] + '12') % 97):
            raise InvalidChecksum()
    else:
        # one of the first two digits isn't a number
        if isdigits(number[0]):
            check = (
                _alphabet.index(number[0]) * 24 +
                _alphabet.index(number[1]) - 10)
        else:
            check = (
                _alphabet.index(number[0]) * 34 +
                _alphabet.index(number[1]) - 100)
        if (int(number[2:]) + 1 + check // 11) % 11 != (check % 11):
            raise InvalidChecksum()
    return number
コード例 #3
0
def validate_siren(value):
    try:
        siren.validate(value)
    except (InvalidChecksum, InvalidFormat, InvalidLength):
        raise ValidationError(
            _("%(value)s is not a valid siren id"),
            params={"value": value},
        )
コード例 #4
0
ファイル: siret.py プロジェクト: yaubi/python-stdnum
def validate(number):
    """Checks to see if the number provided is a valid number. This checks
    the length, formatting and check digit."""
    number = compact(number)
    if not number.isdigit():
        raise InvalidFormat()
    if len(number) != 14:
        raise InvalidLength()
    luhn.validate(number)
    siren.validate(number[:9])
    return number
コード例 #5
0
def validate(number):
    """Checks to see if the number provided is a valid number. This checks
    the length, formatting and check digit."""
    number = compact(number)
    if not number.isdigit():
        raise InvalidFormat()
    if len(number) != 14:
        raise InvalidLength()
    luhn.validate(number)
    siren.validate(number[:9])
    return number
コード例 #6
0
ファイル: siret.py プロジェクト: chandra270490/frappe-bench
def validate(number):
    """Check if the number is a valid SIRET. This checks the length,
    formatting and check digit."""
    number = compact(number)
    if not isdigits(number):
        raise InvalidFormat()
    if len(number) != 14:
        raise InvalidLength()
    luhn.validate(number)
    siren.validate(number[:9])
    return number
コード例 #7
0
ファイル: siret.py プロジェクト: arthurdejong/python-stdnum
def validate(number):
    """Check if the number is a valid SIRET. This checks the length,
    formatting and check digit."""
    number = compact(number)
    if not isdigits(number):
        raise InvalidFormat()
    if len(number) != 14:
        raise InvalidLength()
    luhn.validate(number)
    siren.validate(number[:9])
    return number
コード例 #8
0
def validate(number):
    """Check if the number is a valid SIRET. This checks the length,
    formatting and check digit."""
    number = compact(number)
    if not isdigits(number):
        raise InvalidFormat()
    if len(number) != 14:
        raise InvalidLength()
    # La Poste SIRET (except the head office) do not use the Luhn checksum
    # but the sum of digits must be a multiple of 5
    if number.startswith('356000000') and number != '35600000000048':
        if sum(map(int, number)) % 5 != 0:
            raise InvalidChecksum()
    else:
        luhn.validate(number)
    siren.validate(number[:9])
    return number