def validate_identifier(identifier):
    errors = []
    if identifier:
        if identifier["id_type"] == "issn":
            try:
                issn.validate(identifier["value"])
            except:
                errors.append("Invalid ISSN: {}".format(identifier["value"]))
        elif identifier["id_type"] == "isbn":
            try:
                isbn.validate(identifier["value"])
            except:
                errors.append("Invalid ISBN: {}".format(identifier["value"]))
        elif identifier["id_type"] == "isan":
            try:
                isan.validate(identifier["value"])
            except:
                errors.append("Invalid ISAN: {}".format(identifier["value"]))
        elif identifier["id_type"] == "ismn":
            try:
                ismn.validate(identifier["value"])
            except:
                errors.append("Invalid ISMN: {}".format(identifier["value"]))
        elif identifier["id_type"] == "ean":
            try:
                ean.validate(identifier["value"])
            except:
                errors.append("Invalid EAN: {}".format(identifier["value"]))
    return errors
예제 #2
0
def validate_identifier(identifier):
    errors = []
    if identifier:
        if identifier["id_type"] == "issn":
            try:
                issn.validate(identifier["value"])
            except:
                errors.append("Invalid ISSN: {}".format(identifier["value"]))
        elif identifier["id_type"] == "isbn":
            try:
                isbn.validate(identifier["value"])
            except:
                errors.append("Invalid ISBN: {}".format(identifier["value"]))
        elif identifier["id_type"] == "isan":
            try:
                isan.validate(identifier["value"])
            except:
                errors.append("Invalid ISAN: {}".format(identifier["value"]))
        elif identifier["id_type"] == "ismn":
            try:
                ismn.validate(identifier["value"])
            except:
                errors.append("Invalid ISMN: {}".format(identifier["value"]))
        elif identifier["id_type"] == "ean":
            try:
                ean.validate(identifier["value"])
            except:
                errors.append("Invalid EAN: {}".format(identifier["value"]))
    return errors
예제 #3
0
def validate(number):
    """Checks to see if the number provided is a valid ISMN (either a legacy
    10-digit one or a 13-digit one). This checks the length and the check
    bit but does not check if the publisher is known."""
    number = compact(number)
    if len(number) == 10:
        if number[0] != 'M':
            raise InvalidFormat()
        ean.validate('9790' + number[1:])
    else:
        ean.validate(number)
    return number
예제 #4
0
def validate(number):
    """Checks to see if the number provided is a valid ISMN (either a legacy
    10-digit one or a 13-digit one). This checks the length and the check
    bit but does not check if the publisher is known."""
    number = compact(number)
    if len(number) == 10:
        if number[0] != 'M':
            raise InvalidFormat()
        ean.validate('9790' + number[1:])
    else:
        ean.validate(number)
    return number
예제 #5
0
def validate(number):
    """Checks to see if the number provided is a valid Swiss
    Sozialversicherungsnummer."""
    number = compact(number)
    if len(number) != 13:
        raise InvalidLength()
    return ean.validate(number)
예제 #6
0
def validate(number):
    """Checks to see if the number provided is a valid Swiss
    Sozialversicherungsnummer."""
    number = compact(number)
    if len(number) != 13:
        raise InvalidLength()
    return ean.validate(number)
예제 #7
0
def validate(number):
    """Check if the number is a valid Swiss Sozialversicherungsnummer."""
    number = compact(number)
    if len(number) != 13:
        raise InvalidLength()
    if not number.startswith('756'):
        raise InvalidComponent()
    return ean.validate(number)
예제 #8
0
def validate(number):
    """Check if the number is a valid Swiss Sozialversicherungsnummer."""
    number = compact(number)
    if len(number) != 13:
        raise InvalidLength()
    if not number.startswith('756'):
        raise InvalidComponent()
    return ean.validate(number)
예제 #9
0
def validate(number, convert=False):
    """Checks to see if the number provided is a valid ISBN (either a legacy
    10-digit one or a 13-digit one). This checks the length and the check
    bit but does not check if the group and publisher are valid (use split()
    for that)."""
    number = compact(number, convert=False)
    if not number[:-1].isdigit():
        raise InvalidFormat()
    if len(number) == 10:
        if _calc_isbn10_check_digit(number[:-1]) != number[-1]:
            raise InvalidChecksum()
    elif len(number) == 13:
        ean.validate(number)
    else:
        raise InvalidLength()
    if convert:
        number = to_isbn13(number)
    return number
예제 #10
0
파일: isbn.py 프로젝트: xrg/python-stdnum
def validate(number, convert=False):
    """Checks to see if the number provided is a valid ISBN (either a legacy
    10-digit one or a 13-digit one). This checks the length and the check
    bit but does not check if the group and publisher are valid (use split()
    for that)."""
    number = compact(number, convert=False)
    if not number[:-1].isdigit():
        raise InvalidFormat()
    if len(number) == 10:
        if _calc_isbn10_check_digit(number[:-1]) != number[-1]:
            raise InvalidChecksum()
    elif len(number) == 13:
        ean.validate(number)
    else:
        raise InvalidLength()
    if convert:
        number = to_isbn13(number)
    return number
예제 #11
0
def validate_ean(field, value, error):
    try:
        validated_value = ean.validate(value)

        # stdnum allows 8/12/13 digits long EANs. For us, only EAN-13 works
        if len(validated_value) != 13:
            raise InvalidLength()
    except ValidationError as e:
        error(field, e.message)
예제 #12
0
    def validate_res_partner_gln(self, id_number):
        self.ensure_one()
        if not id_number:
            return False

        try:
            ean.validate(id_number.name)
        except InvalidChecksum:
            return True

        cat = self.env.ref('partner_identification_gln.'
                           'partner_identification_gln_number_category').id
        duplicate_gln = self._search_duplicate(cat, id_number, True)

        if duplicate_gln:
            return True

        return False
예제 #13
0
def upce_to_upca(upce, validate=True):
    """ Converts an UPC-E code to a 12 digit UPC-A code.

    If code is 7 digits and first digit is not zero then will form 8 digit
    code by pading left with a zero (assumes the left zero was lost somewhere
    in conversion to int).

    See:
    https://stackoverflow.com/questions/31539005/how-to-convert-a-upc-e-barcode-to-a-upc-a-barcode
    http://www.taltech.com/barcodesoftware/symbologies/upc

    Args:
      upce (str or int): The upce code.  Will properly handle a 6 or 8 digit
          code or an 8 digit code that lost its leading zero.
      validate: Will validate the length of input, the 'S' leader digit if an 8
          digit code, and the checksum (if given an 8 digit code).

    Returns:
      (str): The UPC-A code.
    """
    given_upce = str(upce)

    # can safely zero pad left a seven digit upce (is missing its left zero)
    if (len(given_upce) == 7) and (given_upce[0] != '0'):
        pad = '0'
    else:
        pad = ''

    padded_upce = pad + given_upce

    if validate:
        if len(padded_upce) not in (6, 8):
            raise ValueError("Provided UPC-E {} must be 6 or 8 digits!".format(
                repr(given_upce)))

        if (len(padded_upce) == 8 and padded_upce[0] not in ('0', '1')):
            raise ValueError("8 digit UPC-E must begin with 0 or 1")

    given_6_digit_upce = (len(padded_upce) == 6)
    upce6 = padded_upce if given_6_digit_upce else padded_upce[1:7]

    # upce6 digit names: abcdeN
    map_id = int(upce6[-1])  # N
    ab_prefix = upce6[0:2]  # ab

    if map_id >= 5:
        core = upce6[2:5], '0' * 4, map_id  # cde0000N
    elif map_id <= 2:
        core = map_id, '0' * 4, upce6[2:5]  # N0000cde
    elif map_id == 3:
        core = upce6[2], '0' * 5, upce6[3:5]  # c00000de
    elif map_id == 4:
        core = upce6[2:4], '0' * 5, upce6[4]  # cd00000e

    # ab + core
    no_leader_no_checksum = ab_prefix + ''.join(map(str, core))

    # add leader, also called 'S' digit
    leader = '0' if given_6_digit_upce else padded_upce[0]
    with_leader_no_checksum = leader + no_leader_no_checksum

    if given_6_digit_upce:
        with_checksum = with_leader_no_checksum\
            + ean.calc_check_digit(with_leader_no_checksum)
    else:
        with_checksum = with_leader_no_checksum + given_upce[-1]
        if validate:
            ean.validate(with_checksum)

    return with_checksum
예제 #14
0
def validate(number):
    """Checks to see if the number provided is a valid
    Swiss Sozialversicherungsnummer."""
    return ean.validate(compact(number))
예제 #15
0
def validate(number):
    """Checks to see if the number provided is a valid
    Swiss Sozialversicherungsnummer."""
    return ean.validate(compact(number))
예제 #16
0
def is_valid_ean(ean_num: str) -> bool:
    try:
        ean.validate(ean_num)
    except Exception as e:
        return False
    return True