首页 > 编程知识 正文

python判断8位信用卡号是否合法

时间:2023-05-04 03:25:59 阅读:211913 作者:1436

我的代码输出不正确,即使我看不到为什么。如果任何人都能解释我的问题,我真的很感激。在

对于作业,我们允许用户输入15位或16位的信用卡号码,并返回所给号码是否有效。在

我们用迷你的舞蹈测试来验证这个数字,这就是我的代码不能工作的地方。卡号42222222222220应该是有效的,但是我的卡号不工作,我相信是因为我不完全理解代码的作用。在

迷你的舞蹈的测试:假设信用卡号码由以下数字组成:

d15 d14 d13 d12 d11 d10 d9 d8 d7 d6 d5 d4 d3 d2 d1 d0

最后一个数字d0是Luhn算法中的校验位。算法如下:

将所有奇数d1,d3,…d15乘以2。在

将每个乘积的位数相加。在

现在把所有偶数d0,…d14和奇数的个位数乘积相加。在

如果最后一张卡可以被10整除,那么它是无效的。在

我的代码是:def len_check(x):

length = len(str((x)))

if (length == 15) or (length == 16):

return True

else:

return False

def is_valid(x):

card = x

num_list= list((str(card)))

sum_odd = 0

sum_even = 0

even_count = 0

odd_count = 0

total_sum = 0

length = 0

for i in num_list:

length += 1

print(length)

count = 0

if length == 16:

odd_count = 15

even_count = 14

if length == 15:

odd_count = 13

even_count = 14

print(even_count)

print(odd_count)

while (count <= length-2):

print('even count', even_count)

print('D-even', num_list[even_count])

sum_even += int(num_list[even_count])

even_count -=2

print('sum even', sum_even)

print('odd count', odd_count)

print('D-odd', num_list[odd_count])

prod = 2 * int(num_list[odd_count])

sum_odd += prod

odd_count -=2

print('sum odd', sum_odd)

count +=2

total_sum = sum_odd + sum_even

print('total sum', total_sum)

if total_sum % 10 == 0:

return True

else:

return False

def main():

cc_num = int(input('Enter at 15 or 16-digit credit card number: '))

if not len_check(cc_num):

print('Not a 15 or 16-digit number')

else:

if not is_valid(cc_num):

print('Invalid credit card number')

else:

print('valid card number')

main()

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。