Кредитка



Задача 1. Кредитки

Кожна кредитна картка належить до певної системи: Visa, Maestro, MasterCard, American Express тощо. Відомо, що картки American Express починаються на 34 та 37; картки MasterCard починаються на 51, 52, 53, 54, чи 55; картки Visa починаються на 4; картки Maestro - на 50, 58, 63, 67, 06. 

Кількість цифр у номері картки є різною для різних систем: 
American Express: 15
Mastercard: 16
Visa: 13 або 16
Maestro: від 12 до 19 

З клавіатури вводиться номер картки. Вивести назву системи, до якої вона належить. Якщо картка не відповідає жодній із вказаних систем за першими цифрами або кількістю цифр - вивести повідомлення "no". 

Наприклад, 
4916656266663198 Visa
5310806649552589 Mastercard
378211521552536 American Express
50000800760042 Maestro
5000087642 no


Задача 2. Алгоритм Луна

Для перевірки правильності введення номера кредитної картки використовується алгоритм Луна. Він полягає у наступному:
1) Кожну другу цифру потрібно помножити на 2, починаючи з передостанньої цифри, і додати всі отримані числа. Якщо результатом множення цифри на 2 є двоцифрове число, його цифри цього результату множення слід додати між собою.
2) Додати до цієї суми ті цифри, які не множились на 2.
3) Якщо остання цифра отриманої суми 0, то номер правильний.

Алгоритм Лун онлайн: https://planetcalc.ru/2465/

Розв'язки самостійних задач:
import random
cyfry=[]
chyslo=int(input(""))
a=chyslo
while (a>0):
    k=a%10
    cyfry.insert(0,k)
    a=a//10
print(cyfry)
control=cyfry[0]*10+cyfry[1]
if (len(cyfry))==15 and (control==34 or control==37):
    print ("American Express")
elif (len(cyfry))==16 and (control>=51 and control<=55):
    print ("Mastercard")
elif (len(cyfry)==16 or len(cyfry)==13) and (cyfry[0]==4):
    print("Visa")
elif (len(cyfry)>=12 and len(cyfry)<=19) and (control==50 or control==58 or control==63 or control==67 or control==6):
    print("Maestro")    
else:
    print("no")



import random
cyfry=[]
chyslo=int(input(""))
a=chyslo
while (a>0):
    k=a%10
    cyfry.insert(0,k)
    a=a//10
print(cyfry)

check=0
for nomer in range(len(cyfry)-2,-1,-2):
    print(cyfry[nomer])
    if cyfry[nomer]*2>=10:
        check=check+(cyfry[nomer]*2)//10+(cyfry[nomer]*2)%10
    else:
        check=check+cyfry[nomer]*2
print(check)
for nomer in range(len(cyfry)-1,-1,-2):
    print(cyfry[nomer])
    check=check+cyfry[nomer]

print(check)
if check%10==0:
    print("ok")


Задача. Перевірка штрих-коду:


Остання зміна: неділя 12 липня 2020 6:11