def num_to_code(user_number, part_number): """ Convert a user/part number combo to an alphanumeric asset code. :param user_number int: The user number. :param part_number int: The part number. :returns: An asset code string. :rtype: str """ if user_number < 0 or part_number < 0: raise ValueError('User ({0}) or part ({1}) number cannot be ' 'negative. '.format(user_number, part_number)) assetno = '' for num in (user_number, part_number): while True: if num > 15: r = num % 16 assetno = assetno + ALPHABET[r + 16] num = num // 16 else: assetno = assetno + ALPHABET[num] break checkdigit = luhn.calc_check_digit(assetno, ALPHABET) assetno = assetno + checkdigit assert luhn.is_valid(assetno, ALPHABET) return assetno
def num_to_code(user_number, part_number): """ Convert a user/part number combo to an alphanumeric asset code. :param user_number int: The user number. :param part_number int: The part number. :returns: An asset code string. :rtype: str """ if user_number < 0 or part_number < 0: raise ValueError('User ({0}) or part ({1}) number cannot be ' 'negative. '.format(user_number, part_number)) assetno = '' for num in (user_number, part_number): while True: if num > 15: r = num % 16 assetno = assetno + ALPHABET[r + 16] num = num // 16 else: assetno = assetno + ALPHABET[num] break checkdigit = luhn.calc_check_digit(assetno, ALPHABET) assetno = assetno + checkdigit assert luhn.is_valid(assetno, ALPHABET) return assetno
def test_normal(self): for code, result in [('7894', '9')]: self.assertEqual(luhn.calc_check_digit(code), result)