Beispiel #1
0
def validate(number, strip_check_digit=True):
    """Checks to see if the number provided is a valid MEID number. This
    converts the representation format of the number (if it is
    decimal it is not converted to hexadecimal)."""
    from stdnum import luhn

    # first parse the number
    number, cd = _parse(number)
    if len(number) == 18:
        # decimal format can be easily determined
        if cd:
            luhn.validate(number + cd)
        # convert to hex
        manufacturer_code = int(number[0:10])
        serial_num = int(number[10:18])
        if manufacturer_code.bit_length() > 32 or serial_num.bit_length() > 24:
            raise InvalidComponent()
        number = "%08X%06X" % (manufacturer_code, serial_num)
        cd = calc_check_digit(number)
    elif number.isdigit():
        # if the remaining hex format is fully decimal it is an IMEI number
        from stdnum import imei

        imei.validate(number + cd)
    else:
        # normal hex Luhn validation
        if cd:
            luhn.validate(number + cd, alphabet=_hex_alphabet)
    if strip_check_digit:
        cd = ""
    return number + cd
Beispiel #2
0
 def onchange_l10n_se_default_vendor_payment_ref(self):
     if not self.l10n_se_default_vendor_payment_ref == "" and self.l10n_se_check_vendor_ocr:
         reference = self.l10n_se_default_vendor_payment_ref
         try:
             luhn.validate(reference)
         except: 
             return {'warning': {'title': _('Warning'), 'message': _('Default vendor OCR number isn\'t a valid OCR number.')}}
Beispiel #3
0
def validate(number, strip_check_digit=True):
    """Checks to see if the number provided is a valid MEID number. This
    converts the representation format of the number (if it is
    decimal it is not converted to hexadecimal)."""
    from stdnum import luhn
    # first parse the number
    number, cd = _parse(number)
    if len(number) == 18:
        # decimal format can be easily determined
        if cd:
            luhn.validate(number + cd)
        # convert to hex
        number = '%08X%06X' % (int(number[0:10]), int(number[10:18]))
        cd = calc_check_digit(number)
    elif number.isdigit():
        # if the remaining hex format is fully decimal it is an IMEI number
        from stdnum import imei
        imei.validate(number + cd)
    else:
        # normal hex Luhn validation
        if cd:
            luhn.validate(number + cd, alphabet=_hex_alphabet)
    if strip_check_digit:
        cd = ''
    return number + cd
Beispiel #4
0
def validate(number, strip_check_digit=True):
    """Checks to see if the number provided is a valid MEID number. This
    converts the representation format of the number (if it is
    decimal it is not converted to hexadecimal)."""
    from stdnum import luhn
    # first parse the number
    number, cd = _parse(number)
    if len(number) == 18:
        # decimal format can be easily determined
        if cd:
            luhn.validate(number + cd)
        # convert to hex
        number = '%08X%06X' % (int(number[0:10]), int(number[10:18]))
        cd = calc_check_digit(number)
    elif number.isdigit():
        # if the remaining hex format is fully decimal it is an IMEI number
        from stdnum import imei
        imei.validate(number + cd)
    else:
        # normal hex Luhn validation
        if cd:
            luhn.validate(number + cd, alphabet=_hex_alphabet)
    if strip_check_digit:
        cd = ''
    return number + cd
Beispiel #5
0
def validate(number, strip_check_digit=True):
    """Check if the number is a valid MEID number. This converts the
    representation format of the number (if it is decimal it is not converted
    to hexadecimal)."""
    # first parse the number
    number, cd = _parse(number)
    from stdnum import luhn
    if len(number) == 18:
        # decimal format can be easily determined
        if cd:
            luhn.validate(number + cd)
        # convert to hex
        manufacturer_code = int(number[0:10])
        serial_num = int(number[10:18])
        if _bit_length(manufacturer_code) > 32 or _bit_length(serial_num) > 24:
            raise InvalidComponent()
        number = '%08X%06X' % (manufacturer_code, serial_num)
        cd = calc_check_digit(number)
    elif isdigits(number):
        # if the remaining hex format is fully decimal it is an IMEI number
        from stdnum import imei
        imei.validate(number + cd)
    else:
        # normal hex Luhn validation
        if cd:
            luhn.validate(number + cd, alphabet=_hex_alphabet)
    if strip_check_digit:
        cd = ''
    return number + cd
Beispiel #6
0
def v_bank_card_number(value) -> bool:
    if not value or not 16 <= len(value) <= 19:
        return False
    try:
        luhn.validate(value)
    except (stdnum_exceptions.InvalidFormat,
            stdnum_exceptions.InvalidChecksum):
        return False
    return True
Beispiel #7
0
def validate(number):
    """Check if the number is a valid Indonesia NPWP number."""
    number = compact(number)
    if len(number) != 15:
        raise InvalidLength()
    if not isdigits(number):
        raise InvalidFormat()
    luhn.validate(number[:9])
    return number
Beispiel #8
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) != 9:
        raise InvalidLength()
    luhn.validate(number)
    return number
Beispiel #9
0
def validate(number):
    """Check if the number provided is a valid ID. This checks the length,
    formatting and check digit."""
    number = compact(number)
    if len(number) > 9:
        raise InvalidLength()
    if not isdigits(number) or int(number) <= 0:
        raise InvalidFormat()
    luhn.validate(number)
    return number
Beispiel #10
0
def validate(number):
    """Check if the number is a valid identity number."""
    number = compact(number)
    if len(number) not in (10, 12):
        raise InvalidLength()
    if not number.isdigit():
        raise InvalidFormat()
    get_birth_date(number)
    luhn.validate(number[-10:])
    return number
Beispiel #11
0
def validate(number):
    """Check if the number provided is a valid ID. This checks the length,
    formatting and check digit."""
    number = compact(number)
    if len(number) > 9:
        raise InvalidLength()
    if not isdigits(number) or int(number) <= 0:
        raise InvalidFormat()
    luhn.validate(number)
    return number
Beispiel #12
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) != 9:
        raise InvalidLength()
    luhn.validate(number)
    return number
def validate(number):
    """Check if the number provided is a valid EPIC number. This checks the
    length, formatting and checksum."""
    number = compact(number)
    if len(number) != 10:
        raise InvalidLength
    if not _EPIC_RE.match(number):
        raise InvalidFormat()
    luhn.validate(number[3:])
    return number
def validate(number):
    """Check if the number is a valid identity number."""
    number = compact(number)
    if len(number) not in (10, 12):
        raise InvalidLength()
    if not isdigits(number):
        raise InvalidFormat()
    get_birth_date(number)
    luhn.validate(number[-10:])
    return number
Beispiel #15
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 number.isdigit() or number[-2:] != '01':
        raise InvalidFormat()
    if len(number) != 12:
        raise InvalidLength()
    luhn.validate(number[:-2])
    return number
Beispiel #16
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 number.isdigit() or number[-2:] != '01':
        raise InvalidFormat()
    if len(number) != 12:
        raise InvalidLength()
    luhn.validate(number[:-2])
    return number
Beispiel #17
0
def validate(number):
    """Check if the number is a valid AMKA. This checks the length,
    formatting and check digit."""
    number = compact(number)
    if not isdigits(number):
        raise InvalidFormat()
    if len(number) != 11:
        raise InvalidLength()
    luhn.validate(number)
    get_birth_date(number)
    return number
Beispiel #18
0
def validate(number):
    """Check if the number is a valid identity number."""
    number = compact(number)
    if len(number) not in (11, 13):
        raise InvalidLength()
    digits = number[:-5] + number[-4:]
    if number[-5] not in '-+' or not isdigits(digits):
        raise InvalidFormat()
    get_birth_date(number)
    luhn.validate(digits[-10:])
    return number
Beispiel #19
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()
    luhn.validate(number)
    siren.validate(number[:9])
    return number
Beispiel #20
0
def validate(number):
    """Check if the number is a valid AMKA. This checks the length,
    formatting and check digit."""
    number = compact(number)
    if not isdigits(number):
        raise InvalidFormat()
    if len(number) != 11:
        raise InvalidLength()
    luhn.validate(number)
    get_birth_date(number)
    return number
Beispiel #21
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()
    luhn.validate(number)
    siren.validate(number[:9])
    return number
def validate(number):
    """Check if the number provided is a valid IMEI (or IMEISV) number."""
    number = compact(number)
    if not number.isdigit():
        raise InvalidFormat()
    if len(number) == 15:
        # only 15 digit IMEI has check digit
        luhn.validate(number)
    elif len(number) not in (14, 16):
        # neither IMEI without check digit or IMEISV (which doesn't have one)
        raise InvalidLength()
    return number
Beispiel #23
0
def validate(number):
    """Check if the number provided is a valid IMEI (or IMEISV) number."""
    number = compact(number)
    if not number.isdigit():
        raise InvalidFormat()
    if len(number) == 15:
        # only 15 digit IMEI has check digit
        luhn.validate(number)
    elif len(number) not in (14, 16):
        # neither IMEI without check digit or IMEISV (which doesn't have one)
        raise InvalidLength()
    return number
Beispiel #24
0
def validate(number):
    """Check if the number provided is a valid bank account number."""
    number = compact(number)
    if not number.isdigit():
        raise InvalidFormat()
    if len(number) == 7:
        luhn.validate(number)
    elif len(number) == 11:
        if _calc_check_digit(number) != number[-1]:
            raise InvalidChecksum()
    else:
        raise InvalidLength()
    return number
def validate(number):
    """Check if the number provided is a valid bank account number."""
    number = compact(number)
    if not number.isdigit():
        raise InvalidFormat()
    if len(number) == 7:
        luhn.validate(number)
    elif len(number) == 11:
        if _calc_check_digit(number) != number[-1]:
            raise InvalidChecksum()
    else:
        raise InvalidLength()
    return number
Beispiel #26
0
def validate(number):
    """Check if the number provided is a valid GSTIN. This checks the length,
    formatting and check digit."""
    number = compact(number)
    if len(number) != 15:
        raise InvalidLength()
    if not _GSTIN_RE.match(number):
        raise InvalidFormat()
    if number[:2] not in _STATE_CODES or number[12] == '0' or number[13] != 'Z':
        raise InvalidComponent()
    pan.validate(number[2:12])
    luhn.validate(number, _ALPHABET)
    return number
Beispiel #27
0
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 number.isdigit() or int(number[0:7]) == 0:
        raise InvalidFormat()
    if len(number) != 11:
        raise InvalidLength()
    # check the province of residence
    if not('001' <= number[7:10] <= '100') and \
            number[7:10] not in ('120', '121', '888', '999'):
        raise InvalidComponent()
    luhn.validate(number)
    return number
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 number.isdigit() or int(number[0:7]) == 0:
        raise InvalidFormat()
    if len(number) != 11:
        raise InvalidLength()
    # check the province of residence
    if not('001' <= number[7:10] <= '100') and \
            number[7:10] not in ('120', '121', '888', '999'):
        raise InvalidComponent()
    luhn.validate(number)
    return number
Beispiel #29
0
def validate(number):
    """Checks to see if the number provided is a valid BN or BN15. This
    checks the length, formatting and check digit."""
    number = compact(number)
    if len(number) not in (9, 15):
        raise InvalidLength()
    if not number[:9].isdigit():
        raise InvalidFormat()
    luhn.validate(number[:9])
    if len(number) == 15:
        if number[9:11] not in ('RC', 'RM', 'RP', 'RT'):
            raise InvalidComponent()
        if not number[11:].isdigit():
            raise InvalidFormat()
    return number
Beispiel #30
0
def validate(number):
    """Check if the number is a valid BN or BN15. This checks the length,
    formatting and check digit."""
    number = compact(number)
    if len(number) not in (9, 15):
        raise InvalidLength()
    if not number[:9].isdigit():
        raise InvalidFormat()
    luhn.validate(number[:9])
    if len(number) == 15:
        if number[9:11] not in ('RC', 'RM', 'RP', 'RT'):
            raise InvalidComponent()
        if not number[11:].isdigit():
            raise InvalidFormat()
    return number
Beispiel #31
0
    def validate_card_number(cls, card_number):
        card_number = unicode(card_number.strip())
        if not card_number:
            raise ValueError('The number should not be none')
        if not card_number.startswith(cls.CHINA_DEBIT_IIN_LIST) and not DEBUG:
            raise ValueError('The number should be issued by China UnionPay')
        if not (16 <= len(card_number) <= 19):
            raise ValueError('The number have an unexpected length')

        try:
            luhn.validate(card_number)
        except (InvalidFormat, InvalidChecksum) as e:
            raise ValueError(*(e.args or (e.message,)))

        return card_number
Beispiel #32
0
 def _onchange_invoice_payment_ref(self):
     """ If Vendor Bill and Payment Reference is changed check validation. """
     if self.partner_id and self.move_type == 'in_invoice' and self.partner_id.l10n_se_check_vendor_ocr:
         reference = self.invoice_payment_ref
         try:
             luhn.validate(reference)
         except:
             return {
                 'warning': {
                     'title':
                     _('Warning'),
                     'message':
                     _('Vendor require OCR Number as payment reference. Payment reference isn\'t a valid OCR Number.'
                       )
                 }
             }
     return super(AccountMove, self)._onchange_invoice_payment_ref()
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
Beispiel #34
0
def validate(number):
    """Check if the number is a valid organisation number. This checks
    the length, formatting and check digit."""
    number = compact(number)
    if not number.isdigit():
        raise InvalidFormat()
    if len(number) != 10:
        raise InvalidLength()
    return luhn.validate(number)
Beispiel #35
0
def validate(number):
    """Check if the number provided is a valid cedula."""
    number = compact(number)
    if len(number) != 11:
        raise InvalidLength()
    if not number.isdigit():
        raise InvalidFormat()
    if number in whitelist:
        return number
    return luhn.validate(number)
def validate(number):
    """Check if the number provided is a valid cedula."""
    number = compact(number)
    if not number.isdigit():
        raise InvalidFormat()
    if number in whitelist:
        return number
    if len(number) != 11:
        raise InvalidLength()
    return luhn.validate(number)
Beispiel #37
0
def validate(number):
    """Check if the number is a valid South Africa Tax Reference Number.

    This checks the length, formatting and check digit.
    """
    number = compact(number)
    if len(number) != 10:
        raise InvalidLength()
    if not isdigits(number):
        raise InvalidFormat()
    if number[0] not in '01239':
        raise InvalidComponent()
    return luhn.validate(number)
Beispiel #38
0
def validate(number):
    """Check if the number is a valid South African ID number.

    This checks the length, formatting and check digit.
    """
    number = compact(number)
    if not isdigits(number):
        raise InvalidFormat()
    if len(number) != 13:
        raise InvalidLength()
    get_birth_date(number)
    get_citizenship(number)
    return luhn.validate(number)
Beispiel #39
0
    def _entity_regex_credit_card(ent, offset, total_ent_list):
        sent = clean_text(ent[0])
        try:
            if validate(sent):
                logger.debug(
                    "Credit card accepted {}.{}".format(sent, ent[0]))

                total_ent_list.append((ent[0],
                                       "FINANCIAL_DATA",
                                       ent[1],
                                       str(ent[2] + offset),
                                       str(ent[3] + offset)))

        except (InvalidChecksum, InvalidFormat):
            logger.debug("Wrong credit card {}.{}.".format(sent, ent[0]))
Beispiel #40
0
    def _get_kpis(self, sent_list):
        """ Extract KPIs from document """

        # full_text is used for proximity detection
        full_text = "".join(sent_list)

        total_ent_list = []

        # Flag to indicate that a sign entity is expected (if True)
        next_person_has_signed = False
        person_signed_idx = 0

        offset = 0

        for sent in sent_list:
            # extract entities (ML)
            if self.ml_ner is not None:
                ent_list_ner = self.ml_ner.get_model_entities(sent)

                for ent in ent_list_ner:
                    # storing as entity/label pair

                    new_ent = [ent[0], ent[1], "NER",
                               str(int(ent[2]) + offset),
                               str(int(ent[3]) + offset)]

                    total_ent_list.append(new_ent)

            # extract entities (Regex)
            ent_list_regex = self.regex_ner.regex_detection(
                sent, full_text, offset)

            for ent_key in ent_list_regex.keys():
                for ent in ent_list_regex[ent_key]:
                    # We treat differently common corporative/personal emails
                    if ent_key == "Email":
                        if not self.corp_email_class.is_not_corp_email(
                                ent[0]):
                            total_ent_list.append((
                                ent[0], "Corp_Email",
                                ent[1], str(ent[2] + offset),
                                str(ent[3] + offset)))

                        else:
                            total_ent_list.append((ent[0], "Email",
                                                   ent[1],
                                                   str(ent[2] + offset),
                                                   str(ent[3] + offset)))

                    elif ent_key == "SIGNATURE":
                        next_person_has_signed = True
                        person_signed_idx = int(ent[3]) + offset

                    elif ent_key == "CreditCard":
                        sent = clean_text(ent[0])
                        try:
                            if validate(sent):
                                logger.debug(
                                    "Credit card accepted {}.{}".format(
                                        sent, ent[0]))

                                total_ent_list.append((ent[0], "FinancialData",
                                                       ent[1],
                                                       str(ent[2] + offset),
                                                       str(ent[3] + offset)))

                        except (InvalidChecksum, InvalidFormat):
                            logger.debug("Wrong credit card {}.{}.".format(
                                sent, ent[0]))

                    elif ent_key in ["FinancialData", "DNI_SPAIN"]:
                        sent = clean_text(ent[0])

                        if (get_cc_module('es', 'dni').is_valid(sent) or
                            get_cc_module('es', 'ccc').is_valid(sent) or
                            get_cc_module('es', 'cif').is_valid(sent) or
                            get_cc_module('es', 'iban').is_valid(sent) or
                                get_cc_module('es', 'nie').is_valid(sent)):

                            total_ent_list.append((ent[0], ent_key, ent[1],
                                                   str(ent[2] + offset),
                                                   str(ent[3] + offset)))
                        else:
                            logger.debug("Invalid data {}.{}".format(
                                sent, ent[0]))

                    else:
                        total_ent_list.append((ent[0], ent_key, ent[1],
                                               str(ent[2] + offset),
                                               str(ent[3] + offset)))

            if next_person_has_signed:
                min_itx_signed = self.signature_max_distance
                id_min_itx = -1

                for i in range(len(total_ent_list)):
                    _ent = total_ent_list[i]

                    if _ent[1] == "PER":
                        if int(_ent[3]) > person_signed_idx:
                            if (int(_ent[3]) - person_signed_idx <
                                    min_itx_signed):
                                min_itx_signed = (int(_ent[3]) -
                                                  person_signed_idx)
                                id_min_itx = i
                                next_person_has_signed = False

                if id_min_itx != -1:
                    _ent = total_ent_list[id_min_itx]

                    total_ent_list.append((_ent[0], "SIGNATURE", _ent[2],
                                           _ent[3], _ent[4]))

            # detection of custom words
            custom_list = self.custom_detector.search_custom_words(sent)
            for _ent in custom_list:
                total_ent_list.append((_ent[0], _ent[1], _ent[0],
                                       str(_ent[2] + offset),
                                       str(_ent[3] + offset)))

            offset += len(sent)

        if next_person_has_signed:
            min_itx_signed = self.signature_max_distance
            id_min_itx = -1

            for i in range(len(total_ent_list)):
                ent = total_ent_list[i]
                if ent[1] == "PER":
                    if int(ent[3]) > person_signed_idx:
                        if int(ent[3]) - person_signed_idx < min_itx_signed:
                            min_itx_signed = int(ent[3]) - person_signed_idx
                            id_min_itx = i
                            next_person_has_signed = False

            if id_min_itx != -1:
                ent = total_ent_list[id_min_itx]

                total_ent_list.append((ent[0], "SIGNATURE", ent[2],
                                       ent[3], ent[4]))

        return total_ent_list
 def test_luhn(self):
     sequence = self.get_sequence("luhn")
     self.assertTrue(luhn.validate(sequence.next_by_id()))