python判断信用卡号是否合法_三十八、练习、Python判断一个信用卡号是否合理

@Author: Runsen

这个一个编程题

一个信用卡号必须是13到16位的整数

1954年,IBM的Hans Luhn提出一种算法,用于验证信用卡号的有效性。

这个算法在确定输入的卡号是否正确,或者这张信用卡是否被扫描仪正确扫描方面是非常有用的。

4,指Visa信用卡

5,指Master万事达卡

37,指American Express 国际信用卡

6,指Discover 信用卡

遵循这个合法性检测可以生成所有的信用卡号,通常称之为Luhn检测或者Mod 10检测,可以如下描述(为了方便解释,假设卡号4388576018402626:

1.从右到左对偶数位数字翻倍。如果对某个数字翻倍之后的结果是一个两位数,那么就将这两位加在一起得到一位数。

2.现在将第一步得到的所有一位数相加。

3.将卡号里从右到左奇数位上的所有数字相加。

4.将第二步和第三步得到的结果相加。

5.如果第四步得到的结果能被10整除,那么卡号是合法的;否则,卡号是不合法的。

例如,号码4388576018402626是不合法的,但是号码4388576018410707是合法的。

编写程序,提示用户输入一个long型整数的信用卡号码,显示这个数字是合法的还是非法的

代码

def isValid(number):

# 判断是不是合法,就是计算出第四步的结果,如果整除就是合法,我们取模就可以了

if sumOf0ddPlace(number) % 10 == 0:

print("信用卡号的合法")

else:

print("信用卡号的不合法")

def sumOfDoubleEvenPlace(number):

# 现在将第一步得到的所有一位数相加。这里的number传入的是int类型

sum = 0

for i in str(number)[::2]:

if int(i)*2 <10:

sum = sum + int(i)*2

else:

for j in str(int(i)*2):

sum = sum + int(j)

return sum

def getDigit(number):

return sum([int(i) for i in str(number)[1::2]])

def sumOf0ddPlace(number):

return sumOfDoubleEvenPlace(number) + getDigit(number)

number = input("用户输入一个的信用卡号码,必须是13到16位的整数")

isValid(number)

# 验证

用户输入一个的信用卡号码,必须是13到16位的整数4388576018402626

信用卡号的不合法

用户输入一个的信用卡号码,必须是13到16位的整数4388576018410707

信用卡号的合法

补充

添加 prefixMatched,判断卡号的前缀是否合法。

4,指visa卡

5,指master卡

37,指American Express卡

6,指Discovery卡

def prefixMatched(number):

if number[0] == '4' or number[0] == '5' or number[0] == '37':

print("信用卡前缀的合法")

elif number[:2] == '37':

print("信用卡前缀的合法")

else:

print("信用卡前缀的不合法")

函数6:def getSize(d): 获得信用卡号的长度并将结果返回

def getSize(d):

return number[:d]

函数7:def getPrefix(number, k): 获得信用卡号的第k位’’’

def getPrefix(number, k):

return number[k]

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值