Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1105 / 688 / 110
Регистрация: 10.03.2012
Сообщений: 4,482

Алгоритм Луна

28.02.2025, 20:38. Показов 732. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Для шестнадцатизначного номера банковской карты, определите корректность ее номера в соответствии с алгоритмом Луна. Дано целое положительное шестнадцатизначное число - номер банковской карты. Вывести "Да", если номер карты является корректным или "Нет".
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.02.2025, 20:38
Ответы с готовыми решениями:

Подскажите алгоритм реализации отношений в Джанге
Нужно реализовать различные отношения между пользователями (типа как в вк): друзья, коллеги, муж/жена и т.п.. Некоторые из них не требуют...

Алгоритм генерации строк из заданных символов
Помогите написать алгоритм на python, которая из символов строки генерит все возможные варианты например из строки -> арп ...

Алгоритм при работе с файлами
Возникла проблема в программе: 1. На входе имеем дирректорию, нам нужно обойти в ней все поддикректории и файлы, создать хеш всех файлов...

2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
37686 / 20934 / 4290
Регистрация: 12.02.2012
Сообщений: 34,427
Записей в блоге: 14
01.03.2025, 09:27
Дословный перевод из Википедии:

Python Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
def check_Luhn(inp_num):
    str_num=str(inp_num)
    sz=len(str_num)
    par=sz%2
    for i in range(sz-1):
        dig=int(str_num[i])
        if i%2 == par:
            dig=dig*2
            if dig > 9:
                dig=dig-9
        sum=sum+dig
    return sum%10 == 0
3
84 / 119 / 28
Регистрация: 17.10.2010
Сообщений: 1,267
01.03.2025, 17:07
Как вариант:
Python Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
def luhn_checksum(card_number):
    def digits_of(n):
        return [int(d) for d in str(n)]
    digits = digits_of(card_number)
    odd_digits = digits[-1::-2]
    even_digits = digits[-2::-2]
    checksum = 0
    checksum += sum(odd_digits)
    for d in even_digits:
        checksum += sum(digits_of(d*2))
    return checksum % 10
 
def is_luhn_valid(card_number):
    return luhn_checksum(card_number) == 0
 
 
result = is_luhn_valid(4532015112830366)
print ('Correct:' + str(result))
result = is_luhn_valid(6011514433546201)
print ('Correct:' + str(result))
result = is_luhn_valid(6771549495586802)
print ('Correct:' + str(result))
Добавлено через 7 минут
Python Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
num = list(input("Please enter the number to test (no space, no symbols, only \
numbers): "))
 
num = list(map(int, num))[::-1]
 
for index in range(1,len(num),2):
    if num[index]<5:
        num[index] = num[index] *2
    else: 
        num[index] = ((num[index]*2)//10) + ((num[index]*2)%10)
 
checksum=sum(num)
 
print("checksum= {}".format(checksum))
 
if checksum%10 !=0:
    print('the number is not valid')
else:
    print('the number is valid!')
Добавлено через 7 минут
Еще вариант:
Python Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
check_numbers = ['49927398716', '4847352989263095', '79927398713', '5543352315777720']
 
def Luhn_Check(number):
 
 
    reverse_numbers = [int(x) for x in number[::-1]] # convert args to int, reverse the numbers, put into a list
    dbl_digits = list() # create empty list
    digits = list(enumerate(reverse_numbers, start=1)) # enumerate numbers starting with an index of 1
 
    for index, digit in digits:
        if index % 2 == 0:  # double every second (other) digit.
 
            doub_digit = digit * 2
            dbl_digits.append(doub_digit - 9) if doub_digit > 9 else dbl_digits.append(doub_digit)
 
        else:
            # if not '0' append to list (this would be the 1 in Luhn algo sequence (1 2 1 2 ...)
            dbl_digits.append(digit)
 
    return sum(dbl_digits) % 10
 
 
if (__name__ == "__main__"):
    print("Valid Numbers: %s " % [x for x in check_numbers if Luhn_Check(x) == 0])
Добавлено через 9 минут
Python Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
from functools import reduce
 
 
def luhn(code):
    
    LOOKUP = (0, 2, 4, 6, 8, 1, 3, 5, 7, 9)
    code = reduce(str.__add__, filter(str.isdigit, code))
    evens = sum(int(i) for i in code[-1::-2])
    odds = sum(LOOKUP[int(i)] for i in code[-2::-2])
    return ((evens + odds) % 10 == 0)
 
 
print("Прошел проверку: ", luhn('4561 2612 1234 5467'))
print("Не прошел проверку: ", luhn('4561 2612 1234 5464'))
Добавлено через 1 час 3 минуты
Строго не судите:
Python Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def luhn_algo(num):
    check_sum = 0
    num_parity = len(num) % 2
    for l in range(len(num) - 1, -1, -1):
        j = int(num[l])
        if (l + 1) % 2 != num_parity:
            j = j * 2
        if j > 9:
            j = j - 9
        check_sum = check_sum + j
    print("value calculated = ", str(check_sum))
    return check_sum % 10 == 0
 
 
for n in (49927398716, 49927398717, 1234567812345678, 1234567812345670):
    print(str(n) + " =>", luhn_algo(str(n)))
Добавлено через 3 минуты
Python Скопировано
1
2
3
4
5
6
7
def luhn_algo(num):
    rev = [int(ch) for ch in str(num)][::-1]
    return (sum(rev[0::2]) + sum(sum(divmod(d * 2, 10)) for d in rev[1::2])) % 10 == 0
 
 
for num2 in (49927398716, 49927398717, 1234567812345678, 1234567812345670):
    print(num2, luhn_algo(num2))
Добавлено через 14 минут
Менее эффективный и громоский:
Python Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
def validate_credit_card_number(card_number):
    #start writing your code here
 
    #Step 1a - complete
    temp_list=list(str(card_number))
    my_list=[]
    list1 = temp_list[-2::-2]
    list2=temp_list[::-2]
    list2 = [int (n) for n in list2]
    #print(list2)
    my_list=[int(n) for n in list1]
    #print(my_list)
    list1 = [int(n)*2 for n in list1]
    t_list=list1
 
    for el in list1:
        sum_res=0
 
        if el>9:
            idx = list1.index(el)
            t_list.pop(idx)
 
            while el:
                rem = el%10
                sum_res+=rem
                el = el//10 
            t_list.insert(idx, sum_res)
    #print(t_list)
 
    #step 1b
 
    list1_sum=sum(t_list)
    list2_sum = sum(list2)
    #print(b_list)
    final_sum = list1_sum+ list2_sum
    #print(final_sum)
 
    if final_sum%10==0:
        return True
    return False
 
card_number= 1456734512345698 #4539869650133101  #1456734512345698 # #5239512608615007
 
result=validate_credit_card_number(card_number)
if(result):
    print("credit card number is valid")
else:
    print("credit card number is invalid")
Добавлено через 44 секунды
Получше:
Python Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
def validate_credit_card_number(card_number):
    temp_list = [int(c) for c in str(card_number)]
 
    list1 = temp_list[-2::-2]
    list2 = temp_list[::-2]
 
    total_sum = sum(list2)
    for el in list1:
        el *= 2
        while el:
            el, rem = divmod(el, 10)
            total_sum += rem
 
    return total_sum % 10 == 0
 
TESTS = [
    (1456734512345698, False),
    (4539869650133101, True),
    (1456734512345698, False),
    (5239512608615007, True),
]
 
for (card_number, expected_valid) in TESTS:
    valid = validate_credit_card_number(card_number)
    assert valid == expected_valid
    result = validate_credit_card_number(card_number)
    if (result):
        print("credit card number is valid")
    else:
        print("credit card number is invalid")
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.03.2025, 17:07
Помогаю со студенческими работами здесь

Алгоритм для расчета
Всем привет. Подскажите, или перенаправьте в нужном направлении, а то не уверен, что в той ветке вопрос задаю))) Есть набор данных. В...

Помогите составить алгоритм
Доброго времени суток! взялся учить питон3, до этого с програмированием связан никак небыл, сам айтишник... хочу научиться писать, читаю...

Как узнать какой алгоритм работает быстрее?
Мне сейчас приходится работать со строками(хтмл страница) длиной по 40 000 символов (ASCII) надо из этой строки при помощи регулярных...

Правильно ли реализован алгоритм двоичного поиска?
проверьте пожулайста -все ли правильно написал... def main (arr, key): n = len(arr) first = 0 last = n mid ...

Алгоритм Олдоса-Бродера, Создание лабиринта
Здравствуйте, решил написать алгоритм Олдоса-Бродера, чтобы генерировать лабиринты, но лабиринты почему то не генерируются. Проверял свой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Как работает Node.js изнутри
run.dev 29.03.2025
Node. js изменил подход к разработке веб-приложений, позволив использовать JavaScript не только на стороне клиента, но и на сервере. Созданный в 2009 году Райаном Далем, этот открытый,. . .
Моки в Python: Mock Object Library
py-thonny 29.03.2025
Тестирование кода требует особого подхода, когда речь идёт о компонентах, взаимодействующих с внешним миром. Мы часто сталкиваемся с непредсказуемостью HTTP-запросов, чтением данных из базы или. . .
JavaScript: Управление памятью и улучшение производительности
run.dev 29.03.2025
В отличие от низкоуровневых языков программирования, JavaScript не требует ручного выделения и освобождения памяти. Здесь работает автоматический сборщик мусора, который определяет, какие объекты. . .
Мультитенантная архитектура со SpringBoot и PostgreSQL
ArchitectMsa 29.03.2025
SaaS-приложения редко обслуживают одного клиента и обычно они должны поддерживать множество организаций, каждая из которых работает в своём изолированном пространстве. Мультитенантная архитектура. . .
std::span в C++: Производительность и лучшие практики
NullReferenced 28.03.2025
std::span — одно из самых недооценённых нововведений стандарта C++20, которое радикально меняет подход к работе с непрерывными последовательностями данных. По сути, это невладеющее представление. . .
Многопоточность в C#: Threadpool
UnmanagedCoder 28.03.2025
Пул потоков в C# — это коллекция заранее созданных и готовых к использованию потоков, которые находятся в распоряжении приложения. Вместо того чтобы создавать и уничтожать потоки для каждой небольшой. . .
Вопросы на собеседованиях по микросервисам
ArchitectMsa 27.03.2025
Работодатели ищут не просто разработчиков, знающих базовые концепции, а специалистов, разбирающихся в тонкостях масштабирования, отказоустойчивости и производительности. Сейчас на первый план выходят. . .
Взаимодействие Python с REST API
py-thonny 27.03.2025
REST API - это архитектурный стиль взаимодействия компонентов распределённого приложения в сети. Python располагает функциональным набором инструментов для работы с REST API и основная библиотека для. . .
sshd restrictions, ssh access limitations
jigi33 26.03.2025
sshd restrictions | ssh access limitations рестрикции доступа на сервер sshd статья: https:/ / www. golinuxcloud. com/ restrict-allow-ssh-certain-users-groups-rhel подробные расшифровки по. . .
Компиляция C++ с Clang API
NullReferenced 24.03.2025
Компиляторы обычно воспринимаются как черные ящики, которые превращают исходный код в исполняемые файлы. Мы запускаем компилятор командой в терминале, и вуаля — получаем бинарник. Но что если нужно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер