使用字符串切片和列表解析式解代码数比较少更简洁,可以这样写:
num='5432123456788881'
even=[2*int(x) if 2*int(x)<10 else 2*int(x)-9 for x in list(num[::2])]
print(even)
if sum([int(x) for x in list(num[1::2])])+sum(even)==70:
print('pass')
else:
print('access denied')
如对你有帮助,请点击这个回答的右上方采纳按钮支持一下。
如果有帮助的话,请点击右上角【采纳】按钮,支持一下!!
def lun(num):
Odd = 0
Even = 0
for i in range(len(num)-1,-1,-2): #遍历奇数位的
Odd += eval(num[i])
for i in range(len(num)-1-1,-1,-2): #遍历偶数位的
if eval(num[i])*2 >= 10:
Even = Even + eval(num[i])*2 -9
else:
Even = Even + eval(num[i])*2
if (Odd + Even)%10 == 0:
print("校验通过。")
else:
print("银行卡号有误!!")
num = "5432123456788881"
lun(num)
def check_card(numbers: str):
"""
判断信用卡号是否通过lun算法校验
:param numbers: str
:return: bool
"""
number_list = list(numbers)
r1 = number_list[::-1][::2]
res1 = sum(int(i) for i in r1)
r2 = number_list[::-1][1::2]
res2 = 0
for i in r2:
val = int(i) * 2
if 100 > val >= 10:
val -= 9
res2 += val
count = res1 + res2
if count % 10 == 0:
return True
return False
if __name__ == '__main__':
res = check_card('5432123456788881')
print(res)