(PYTHON) The last digit of a credit card number is the check digit, which protec
ID: 3664176 • Letter: #
Question
(PYTHON)
The last digit of a credit card number is the check digit, which protects against transcription errors such as an error in a single digit or the transposition of two adjacent digits. The following method is used to verify actual credit card numbers but (for simplicity) we will describe it for a number with 8 digits instead of 16.
Starting form the rightmost digit, form the sum of every other digit.
– Example: ifthecardnumberis43589795,thenyouformthesum: 5+7+8+3=23
Double each of the digits that were not included in the previous step. Add all the digits of the resulting numbers.
– Example: for the card number 4358 9795, the not included digits were [9, 9, 5, 4]. Dou- bling these leads to [18, 18, 10, 8]. Summing the digits results in:
1 + 8 + 1 + 8 + 1 + 0 + 8 = 27
Add the sums from the previous two steps. If the last digit of the sum is zero, then the credit card number is valid.
– Example: for the number 4358 9795, this step gives 23 + 27 = 50. The last digit of 0 means the number is valid.
Write a program that accepts a number from the user via a prompt and perform the above algorithm to check if the number is valid or not. If the number is valid, print a message to the screen informing the user. Your program should be capable of performing the algorithm on a number consisting of any number of digits.
(Hint: When isolating individual digits, it is useful work on the number as a string, which is just a sequence of characters. When performing arithmetic, you will need to convert characters into integers. Remember, the function int() is used to convert floats or strings containing number characters into integers. Likewise, the function str() is used to convert ints or floats into a string of number characters.)
The output of your program should display the credit card number entered and its validity status. For example:
Test your program with the following numbers (spaced provided simply to make reading easier, your program does not need to handle spaces.):
(Hint: Using just what has been covered so far in lecture, this can be accomplished in as little as 14 lines of code.)
4
Explanation / Answer
cr_number = input("8-digit credit card number: ").replace(" ", "") #input the values
tot1 = 0 #tot value
tot2 = 0 #tot val
for dig in cr_number[-1::-2]:
tot1 += int(dig)
for dig in cr_number[-2::-2]:
tot2 += sum(int(x) for x in str(int(dig)*2))
rem = (tot1 + tot2) % 10
if rem == 0:
print("Given Card is credit card number.")
else:
invalid_chk_digit = int(cr_number[-1])
if invalid_chk_digit - rem < 0:
valid_chk_digit = invalid_chk_digit + (10 - rem)
else:
valid_chk_digit = invalid_chk_digit - rem
print("Given Card is invalid - the correct check digit is {}".format(valid_chk_digit))
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.