【发布时间】:2015-09-18 18:01:46
【问题描述】:
我正在做这个项目,我必须检查信用卡号是否有效。在这种情况下,我只需要一张 8 位数的信用卡(我知道这不是现实)。问题来了
信用卡号的最后一位是校验位,可防止抄录错误,例如一位数错误或两位数切换。以下方法用于验证实际的信用卡号,但为简单起见,我们将使用 8 位数字而不是 16 位来描述它:
• 从最右边的数字开始,形成所有其他数字的总和 数字。例如,如果信用卡号是
4358 9795,那么您 形成总和5 + 7 + 8 + 3 = 23.• 将前面未包含的每个数字加倍 步。添加结果数字的所有数字。例如,与 上面给出的数字,加倍数字,从 倒数第二个,
yields 18 18 10 8。在这些值中添加所有数字 产生1 + 8 + 1 + 8 + 1 + 0 + 8 = 27。• 将前面两个步骤的总和相加。如果最后一位数字 结果为0,数字有效。在我们的例子中,23 + 27 = 50,所以 号码有效。
编写一个程序来实现这个算法。用户应提供一个 8 位数字,您应打印出该数字是否有效。如果它无效,则应打印使其有效的校验位的值。
我必须使用循环来求和。但是,我不知道如何使用循环。
这是我的代码
# Credit Card Number Check. 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
# switching two digits. The following method is used to verify actual credit card
# numbers but, for simplicity, we will describe it for numbers with 8 digits instead
# of 16:
# Starting from the rightmost digit, form the sum of every other digit. For
# example, if the credit card number is 43589795, then you form the sum
# 5 + 7 + 8 + 3 = 23.
# Double each of the digits that were not included in the preceding step. Add # all
# digits of the resulting numbers. For example, with the number given above,
# doubling the digits, starting with the next-to-last one, yields 18 18 10 8. Adding
# all digits in these values yields 1 + 8 + 1 + 8 + 1 + 0 + 8 = 27.
# Add the sums of the two preceding steps. If the last digit of the result is 0, the
# number is valid. In our case, 23 + 27 = 50, so the number is valid.
# Write a program that implements this algorithm. The user should supply an 8-digit
# number, and you should print out whether the number is valid or not. If it is not
# valid, you should print out the value of the check digit that would make the number
# valid.
card_number = int(input("8-digit credit card number: "))
rights = 0
for i in card_number[1::2]:
rights += int(i)
lefts = 0
for i in card_number[::2]:
lefts += int(i)*2%10+int(i)*2/10
print card_number, (rights +lefts)/10
if remaining == 0:
print("Card number is valid")
else:
print("Card number is invalid")
if digit_7 - remaining < 0:
checkDigit = int(digit_7 + (10 - remaining))
print("Check digit should have been:", checkDigit)
else:
checkDigit = int(digit_7 - remaining)
print("Check digit should have been:", checkDigit)
【问题讨论】:
-
你的错误是什么?
-
没有错误,我需要为这个程序使用循环,不知道如何。这个程序有效,但它没有考虑交替数字和它们的双数的总和。总和的最后一位数字必须是 o。校验位为 4。
-
您的问题是什么?目前尚不清楚您具体要寻求什么帮助。请编辑/更新您的问题以提出特定问题。
-
丹,这是一个简单的问题。我们需要检查其有效性的 8 位信用卡号。条件是:- 1. 最后一位/校验位必须是 4。 2. 从最右边的数字开始,形成所有其他数字的总和。例如,如果信用卡号码是 4358 9795,那么你的和就是 5 + 7 + 8 + 3 = 23。现在把剩下的所有数字加倍。第一组数字和第二组数字之和应能被 10 整除。/或最后一位为 0。
-
是的,但是您这样做有什么问题?
标签: python python-2.7 python-3.x