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
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.')}}
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
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
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
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
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 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
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
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
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
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
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
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
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 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
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): """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
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
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
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
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)
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)
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)
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)
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]))
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()))