Содержание
- Алгоритм луна формула excel
- Алгоритм Луна
- Что такое алгоритм Луна?
- Объяснение алгоритма Луна
- Формула
- Примеры Алгоритм Луна
- Ограничения
- Часто задаваемые вопросы (FAQ)
- Рекомендуемые статьи
- Про структуру номера банковской карты и алгоритм Луна
- Первая цифра в номере карты – это платежная система
- Цифры со 2 по 6 включительно — идентификатор эмитента карты
- 16 цифра – контрольная, по алгоритму Луна
- Примеры для вычисления контрольной цифры
- Алгоритм Луна – как это работает
- Источники информации
- внешние ссылки
- Бонус – номер вагона РЖД
- А также в нумерации сим-карт
Алгоритм луна формула excel
J0urna1ist,
во вложенном файле в ячейке С9 формула для расчета проверочной цифры для произвольного количества разрядов не более 35. Выборочно протестировал по онлайн калькулятору.
Получилось сделать только с дополнительным диапазоном, к вечеру что-то не соображу как в одну формулу все впихнуть. Может гуру помогут.
Еще понял, что для расчета проверочной цифры и расчета контрольного разряда формулы должны быть разными, т.к. четные и нечетные позиции разрядов будут браться по разному.
J0urna1ist,
во вложенном файле в ячейке С9 формула для расчета проверочной цифры для произвольного количества разрядов не более 35. Выборочно протестировал по онлайн калькулятору.
Получилось сделать только с дополнительным диапазоном, к вечеру что-то не соображу как в одну формулу все впихнуть. Может гуру помогут.
Еще понял, что для расчета проверочной цифры и расчета контрольного разряда формулы должны быть разными, т.к. четные и нечетные позиции разрядов будут браться по разному. Kostya_Ye
Сообщение J0urna1ist,
во вложенном файле в ячейке С9 формула для расчета проверочной цифры для произвольного количества разрядов не более 35. Выборочно протестировал по онлайн калькулятору.
Получилось сделать только с дополнительным диапазоном, к вечеру что-то не соображу как в одну формулу все впихнуть. Может гуру помогут.
Еще понял, что для расчета проверочной цифры и расчета контрольного разряда формулы должны быть разными, т.к. четные и нечетные позиции разрядов будут браться по разному. Автор — Kostya_Ye
Дата добавления — 20.01.2020 в 20:12
Источник
Алгоритм Луна
Что такое алгоритм Луна?
Алгоритм Луна, также известный как алгоритм «модуль 10» или «модуль 10», представляет собой математическую формулу для проверки идентификационных номеров кредитных карт, IMEI, номеров социального страхования, корпоративных идентификационных номеров и т. д. Эта формула контрольной суммы широко используется сегодня, особенно для облегчения онлайн-платежей путем обнаружения случайных ошибок ввода идентификационных номеров.
Формула алгоритма Луна была создана немецким ученым-компьютерщиком Гансом Петером Луном в 1960-х годах, в честь которого эта формула и получила свое название. Он работал в IBM в качестве исследователя и создал этот валидатор, используя современные математические алгоритмы, которые позволяли компьютерам быстро устанавливать правильный ввод идентификационных номеров. Однако он идентифицирует неправильные вводы чисел, а не злонамеренные атаки.
Программы для Windows, мобильные приложения, игры — ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале — Подписывайтесь:)
- Калькулятор алгоритма Луна — это инструмент, который помогает определить правильную последовательность и ввод идентификационных номеров для пользователей карт, номеров счетов, идентификационных номеров фирм и т. д.
- Глобальные финансовые компании по электронным переводам средств, такие как Visa и Master Card, используют формулу контрольной суммы для ускорения онлайн-платежей и транзакций. Кроме того, исключается перенаправление всего процесса покупки из-за неправильного ввода пользователем номера кредитной или дебетовой карты.
- Алгоритм генерирует контрольное значение, которое подтверждает правильность ввода идентификационного номера и в основном совпадает с последней цифрой номера кредитной карты.
Объяснение алгоритма Луна
Валидатор алгоритма Луна помогает проверять и отличать действительные числа от ошибочно введенных или неправильных входных данных. Это метод, широко используемый государственными и корпоративными организациями для устранения случайных ошибок клиентов или пользователей при использовании кредитных карт или идентификационных номеров для онлайн-платежей или транзакций.
Например, проверка Алгоритм Луна для кредитной карты требует обнаружения неправильных номеров карт в терминале торговой точки, когда покупатель совершает платеж любым продавцам в Интернете. Этот алгоритм помогает выполнять повседневные транзакции для отдельных покупателей, предприятий и правительств, устраняя сложности перенаправления всего процесса и экономя время.
Алгоритм довольно сложный, он определяет контрольный ключ (также известный как контрольная сумма) для проверки определенного числа в последовательности или полного идентификационного кода. Таким образом, компьютерные системы синхронизируются с алгоритмом Луна, который автоматически считывает неправильные входные данные, чтобы пользователь был осторожен. Более того, он может определить даже один неверный ввод из целого числа с помощью арифметических вычислений, чтобы сверить получившееся число с ожидаемым результатом.
Сегодня все ведущие компании, предоставляющие финансовые услуги, такие как Master Card, Visa и American Express, используют генератор алгоритмов Луна для проверки идентификационных номеров и облегчения перевода платежей. Таким образом, контрольная сумма, сгенерированная алгоритмом, подходит для устранения любых возможностей человеческой ошибки, которая может переориентировать всю деятельность по покупке.
Точно так же некоторые бренды, выпускающие подарочные карты, такие как Amazon или H&M, используют генератор алгоритма Луна для генерации контрольной суммы для идентификационных номеров.
Формула
Калькулятор алгоритма Луна генерирует контрольную сумму или контрольный ключ, который зависит от одной цифры и определяется суммой заданной последовательности чисел. Этот контрольный ключ иногда похож на последнюю цифру последовательности в целях проверки.
Формула алгоритма Луна для проверки идентификационных номеров включает следующие шаги:
- Шаг 1 — Последовательность чисел, начинающаяся с первого числа справа или крайнего правого числа, умножается на два или удваивается, и это следует для каждого второго числа от первого крайнего правого числа.
- Шаг 2 — Если двойное число равно или больше 10, то берется сумма полученных двузначных чисел,
- Шаг 3 — Следующим шагом является вычисление суммы всех результирующих, которые мы имеем после умножения на 2,
- Шаг 4 – После получения суммы всех цифр контрольная или контрольная цифра «x» равна = x = (10 – (x mod 10) mod 10). Таким образом, значение «x» является контрольной суммой или контрольным ключом в соответствии с алгоритмом Луна для проверки заданной последовательности чисел. Обычно «x» — это последняя цифра последовательности идентификационных номеров, которую определяет алгоритм.
Примеры Алгоритм Луна
Давайте теперь посмотрим на некоторые расчеты с использованием формулы алгоритма Луна, упомянутой выше,
Рассмотрим следующую последовательность номеров счетов «0974864982x».
Давайте определим правильное значение «x», используя формулу алгоритма Луна,
Последовательность 0974864982xШаг 1 121212121 2x 0дней187дней88дней124дней188дней4xднейШаг 2 1+8 1+2 1+8 9 3 9 Шаг 3 (сумма) 0978834984x
- Шаг 3 — Сумма всех значений после умножения = 0+9+7+8+8+3+4+9+8+4+x = 60
- Шаг 4 – Контрольная цифра = (10 – (60 mod 10)) mod 10 = 5
- Таким образом, значение x и полный номер счета равны «09728649825».
- Можно проверить контрольный номер «5», вычислив сумму полного номера счета = 0 + 9 + 7 + 2 + 8 + 6 + 4 + 9 + 8 + 2 + 5 = 60
Таким образом, если при вводе идентификационного номера произошла ошибка и результирующая не равна 0 или не кратна 10, система обнаруживает ошибку и предупреждает пользователя.
Компании и сети, выпускающие кредитные карты, используют математическую формулу для предотвращения утечки данных, защиты своих сетей и упрощения работы пользователей. Таким образом, алгоритм Луна или Modulus 10 является одним из таких инструментов, помогающих им в проверке идентификационных номеров.
Кредитные карты удобны для мгновенных платежей и обеспечивают более быстрое разрешение проблем и обнаружение ошибок. Кроме того, банки и сети, выпускающие карты, используют эти алгоритмы для быстрого шифрования и расшифровки данных с помощью программного обеспечения, включающего алгоритмы Луна.
Точно так же Visa — глобальная компания по электронным переводам средств — использует 13-й символ или цифра идентификационного номера, в то время как другие основные сети используют последнюю цифру.
Ограничения
Хотя формула алгоритма Луна является полезным инструментом для проверки большого набора идентификационных номеров, этот метод также имеет определенные ограничения, такие как:
- Алгоритм ограничивает обнаружение определенных последовательностей, в которых пара может поменяться позициями и по-прежнему иметь одинаковую контрольную сумму. Например, в последовательности чисел «02374598» и «82374590» есть 0 и 8. Однако, если 0 заменить на 8, а 8 заменить на 0, результирующая контрольная сумма останется прежней.
- Во-вторых, алгоритм не может обнаружить двойную ошибку, например, порядковые номера 001133 и 001166 будут иметь одинаковую контрольную сумму «3», и может не обнаружить неправильный ввод.
- Кроме того, если в начале последовательности присутствует 0 или его отсутствие в последовательности, это не приведет к изменению контрольной суммы Луна. Например, число «000786» и только «786» будут иметь одинаковую контрольную сумму. Однако неправильная последовательность ввода чисел может не определить ошибку пользователя, если их контрольные суммы совпадают.
Часто задаваемые вопросы (FAQ)
1. Для чего используется алгоритм Луна?
Алгоритм Луна полезен для точной идентификации и проверки кредитных карт, дебетовых карт, номеров социального страхования или корпоративных идентификационных номеров. Когда пользователь карты вводит номер своей карты во время покупки в Интернете, алгоритм Луна помогает предупредить его о случайных и неправильных вводах. Таким образом, компании-эмитенты карт включают этот алгоритм в свои сети и операционные системы.
2. Как работает алгоритм Луна?
Калькулятор алгоритма определяет контрольный ключ или контрольную сумму для проверки идентификационного номера. Таким образом, самое правое число умножается на два или удваивается, что следует за каждым альтернативным числом в последовательности. На следующем шаге получается сумма всех этих значений, равная нулю или кратная 10. Таким образом, добавление контрольного числа к последовательности должно иметь суммарное значение, равное нулю или кратное 10, в соответствии с алгоритмом Луна. В противном случае алгоритм идентифицирует неверный или случайный ввод.
3. Использует ли Visa алгоритм Луна?
Да, Visa использует алгоритм Луна для облегчения денежных переводов по всему миру с помощью транзакций по кредитным и дебетовым картам. Кроме того, это помогает компании завоевать доверие пользователей и повышает удобство работы пользователей, устраняя длительный процесс перенаправления из-за случайного ввода идентификационных номеров. Но этот алгоритм не генерирует и не проверяет CVV, дату истечения срока действия или информацию о магнитных полосах.
Рекомендуемые статьи
Эта статья представляет собой руководство по тому, что такое алгоритм Луна и его значение. Здесь мы объясняем ее применение, формулу, примеры и ограничения формулы. Вы также можете просмотреть наши рекомендуемые статьи о корпоративных финансах –
- Защищенная и необеспеченная кредитная карта
- Теорема Байеса
- Прогнозное моделирование
Программы для Windows, мобильные приложения, игры — ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале — Подписывайтесь:)
Источник
Про структуру номера банковской карты и алгоритм Луна
Бесплатный онлайн инструмент проверки банковских карт, это профессиональный инструмент, который проверит данные номера кредитной карты, покажет от какова банка карта сбербанка, тинькофф или любого другого, ну или просто можете проверить кредитная ли карта.
Первая цифра в номере карты – это платежная система
1 Это различные авиакомпании
2 Тоже авиалинии, а также наша система МИР
3 American Express, Maestro
4 VISA
5 MasterCard, Maestro
6 China UnionPay
7 Топливные компании
8 Предприятия в сфере телекоммуникаций
9 Государственные структуры
То есть по этой первой цифре сразу не определить, к какой конкретной платежной системе относится карта.
Видимо, за исключением цифры 4 – везде упоминается под этим номером только VISA.
Посмотрел на свою дисконтную карту одной из топливных компаний – действительно, начинается на 7.
Цифры со 2 по 6 включительно — идентификатор эмитента карты
Есть внутриотраслевые классификаторы – банковские, авиакомпании, топливные – код из которых здесь используется.
Если у вас, например, есть пара карточек от одного и того же банка – посмотрите на эти цифры, наверняка найдете совпадения.
16 цифра – контрольная, по алгоритму Луна
И последняя 16 цифра – это цифра для правильности всего комплекса цифр, образующих номер карточки, и эта цифра формируется алгоритмом Луна.
Алгоритм разработан сотрудником IBM Гансом Питером Луном, в 1954 году, запатентован в 1960.
Этот алгоритм не является шифровальным средством, используется только для проверки, правильно ли были указаны цифры номера банковской карты.
Например, вы делаете онлайн-платеж, вводите данные своей карты.
Первое, что наверняка сделает система проверки – это проверит по этому алгоритму, не сделали ли вы случайно ошибку при ручном наборе номера.
Примеры для вычисления контрольной цифры
Num[1..N] — номер карты, Num[N] — контрольная цифра.
sum = 0 for i = 1 to N-1 do p = Num[N-i] if (i mod 2 <> 0) then p = 2*p if (p > 9) then p = p – 9 end if end if sum = sum + p next i //дополнение до 10 sum = 10 – (sum mod 10) if (sum == 10) then sum = 0 end if Num[N] = sum
#include // заголовок объявляющий функцию strlen() int luhn(const char* card_number) // принимаем в аргументы номер карты < int len = strlen(card_number); // узнаем длину номера карты int number = 0; // текущая цифра в цикле (см. ниже) int check_digit = 0; // переменная которая будет хранить проверочную цифру int i; for(i = 0; i 9) // согласно алгоритму, ни одно число не должно быть больше 9 < number -= 9; // второй вариант сведения к единичному разряду >> check_digit += number; // прибавляем к check_digit номера согласно алгоритму > return (check_digit * 9) % 10; // возвращаем проверочное число вычисленное согласно алгоритму >
#include int luhn(std::string input) < int number = 0; int check_digit = 0; for(int i = 0; i 9) < number -= 9; >> check_digit += number; > return (check_digit * 9) % 10; >
Алгоритм Луна – как это работает
Набросал в Excel таблицу – надо же проверить на своей карте, как это работает, мало ли чего напишут.
Проверил – работает.
Пронумеруем по порядку 16 цифр карты
1 шаг.
Все цифры, стоящие на нечетных местах, т.е. 1,3,5, …15 , умножаем на 2
Все цифры, стоящие на четных местах, т.е. 2,4,6, …, 16, используем дальше как они есть.
Получили ряд из 16 новых цифр-чисел.
2 шаг.
Теперь все полученные числа нужно будет сложить, но сначала нужно сделать так, чтобы все числа в итоговом ряду были только однозначными.
Если какое-то произведение оказалось двузначным, то от него вычитаем 9.
Например, было 12, минус 9, запишем 3.
Или просто записываем это двузначное число как два однозначных. Например, вместо 12 просто запишем две цифры: 1 и 2. При итоговом суммировании это и будет та же цифра 3.
3 шаг.
Все полученные в результате преобразования однозначные числа складываются.
Полученная сумма обязательно должна делиться на 10 нацело.
В нашем примере эта сумма оказалась равна 80.
Если у вас не получилось сумма, которая ровно делится на 10, это не означает, что у вас неправильная карта.
Это означает, что вы где-то ошиблись в расчетах.
Кстати.
В оригинале описания алгоритма нумерация делается справа налево. И этот алгоритм применяется на практике не только для банковских карт с 16-значным номером, но и, например, для 8-значных номеров вагонов РЖД, для номеров сим-карт.
Источники информации
- U.S. Patent 2 950 048 Computer for Verifying Numbers, Hans P. Luhn, August 23, 1960.
внешние ссылки
- Реализация на 88 языках в проекте Rosetta Code
Бонус – номер вагона РЖД
Алгоритм Луна используется в различных областях, где есть необходимость какой-либо нумерации.
Например, РЖД использует этот механизм для контроля нумерации вагонов.
То есть алгоритм. в принципе, может работать с последовательностями цифр различной длины.
А также в нумерации сим-карт
Если вы посмотрите на номер своей сим-карты – он обязательно будет начинаться с 89.
В любой стране.
Источник
secundus Пользователь Сообщений: 4 |
#1 12.11.2014 20:28:54 Нужна помощь в написании формулымакроса по алгоритму Луна. Вот формула истиналожь:
нашёл макрос:
но он тоже проверяет на ложь, истина…… Изменено: vikttur — 14.07.2021 12:53:54 |
||||
На просторах интернета, там, откуда эти формула и код, в первом сообщении ссылка на Википедию, статья «Алгоритм Луна». В ней есть раздел «Алгоритм вычисления контрольной цифры». Первый алгоритм после элементарного допиливания под VBA считает контрольную цифру. |
|
xsandu Пользователь Сообщений: 2 |
#3 05.02.2016 04:42:36 Алгоритм Луна для проверки IMEI номера (15-значного).
Прикрепленные файлы
|
||
xsandu Пользователь Сообщений: 2 |
#4 05.02.2016 04:52:39
Расчет 19-го знака по алгоритму Луна по известным первым 18 знакам можно выполнить так:
затем объединить строки
Прикрепленные файлы
|
||||||
journalist Пользователь Сообщений: 3 |
Подскажите пожалуйста, как сделать подсчет контрольного числа имея число из 25 символов, формулу дописал, 24 считает, 25 отказывается постоянно выдает: #ЗНАЧ! |
PooHkrd Пользователь Сообщений: 6602 Excel x64 О365 / 2016 / Online / Power BI |
#6 17.01.2020 16:57:50 Вариант на Power Query для чисел произвольной длины.
Прогнал на массиве 230 тыс строк сформированных рандомно чисел, отработал за 4 секунды. Прикрепленные файлы
Изменено: PooHkrd — 17.01.2020 17:44:44 Вот горшок пустой, он предмет простой… |
||
Кто может подсказать решение? Сколько их будет всего? Изменено: vikttur — 14.07.2021 12:55:37 |
|
whateverlover Пользователь Сообщений: 435 |
#8 14.07.2021 01:00:38
Ноль |
||
Ігор Гончаренко Пользователь Сообщений: 13746 |
#9 14.07.2021 04:03:25
не поверите! ровно 100 тысяч шт. Изменено: Ігор Гончаренко — 14.07.2021 04:05:29 Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||
цитируйте, когда это необходимо [МОДЕРАТОР] Интересно! Изменено: vikttur — 15.07.2021 20:34:12 |
|
JayBhagavan Пользователь Сообщений: 11833 ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64 |
Dody Fischer, Вы БОГ цитирования! =))) <#0> |
Ігор Гончаренко Пользователь Сообщений: 13746 |
#12 15.07.2021 19:40:12 Dody Fischer, Изменено: Ігор Гончаренко — 15.07.2021 19:41:03 Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
Алгоритм Луна, как получить следующее значение |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Подборка по базе: Газо-жидкостная хроматография в подтверждении подлинности и коли, технологические карты.docx, №4 Определение количества груза на танкере.doc, Технологические карты учащихся на уроках истории.docx, 2(4) Определение первичных и вторичных поражающих факторов ЧС пр, Практическая №2.2.1. Оформление маршрутной карты.docx, Бланк отчета ПЗ 4.1.4. Определение класса защищенности ГИС.doc, построение структурной карты,лаб3.docx, Бланк отчета ПЗ 4.1.4. Определение класса защищенности ГИС — пе, 06-1613 Технологические карты на обеды.pdf
Определение подлинности банковской карты
и штрих-кода с помощью MS EXCEL
Выполнила:
Преснякова Ангелина Николаевна,
учащаяся 9 класса
Научный руководитель:
Кострова Татьяна Ивановна,
учитель информатики
1 квалификационной категории
Муниципальное бюджетное образовательное учреждение «Хвощевская школа»
Цель — создать программу для определения подлинности банковской карты и штрих-кода, расчета их контрольной цифры, используя возможности MS Excel.
Задачи:
-изучить литературу и интернет-ресурсы по данной теме;
-изучить возможности программы MS Excel;
-создать программы для определения подлинности банковской карты и штрих-кода;
-создать программы для расчета контрольной цифры в номере или коде.
Гипотеза: любой номер пластиковой карты или штрих-код товара можно проверить с помощью программы MS Excel.
Методы исследования:
-эксперимент,
-анализ.
Актуальность
- в настоящее время банковские карты являются неотъемлемым атрибутом каждого современного человека, поэтому так важна информация об их подлинности для любого держателя.
- Не меньший интерес так же вызывает проверка подлинности штрих-кода любого продукта, так как от этого зависит качество покупаемого товара.
Алгоритм проверки подлинности банковской карты
Большинство карт имеет 16 цифр от 0 до9. Числа сгруппированы по 4 цифры, чтобы их легче было прочитать (ABCD EFGH IJKL MNOP).
Контрольная цифра (P) связана с предыдущими цифрами в соответствии с алгоритмом Луна:
1.Каждую цифру в нечетной позиции, начиная с первого числа слева, нужно умножить на 2. Если результат больше 9, необходимо сложить обе цифры этого двузначного числа (или, что-то же самое, вычесть из него 9). Например, если получилось число 14, сложение цифр даёт 1+ 4 = 5, и вычитание: 14-9=5.
2. Затем складываются все полученные таким образом числа, а также цифры, расположенные на чётных позициях (в том числе последняя контрольная цифра).
3.Если конечная сумма кратна 10, номер карты является подлинным. Заметим, что именно последняя контрольная цифра делает общую сумму кратной 10.
Алгоритм проверки подлинности штрих-кода
Штрих-код EAN o6ычно состоит из 13 цифр
1.сложить цифры на нечетных позициях, начиная с левой и без учета контрольной; |
2. К полученному значению прибавить утроенную сумму цифр на четных позициях; |
3. Определить контрольную цифру так, чтобы общая сумма была кратна 10 |
Пример реализации алгоритма Луна:
Рассмотрим на примере номер карты – 5481 7217 6871 5888.
По алгоритму Луна имеем (цифры, стоящие на нечетных позициях, умножаем на 2):
5∙2=10→1+0=1 6∙2=12→1+2=3
8∙2=16→1+6=7 7∙2=14→1+4=5
7∙2=14→1+4=5 5∙2=10→1+0=1
1∙2=2 8∙2=16→1+6=7
Найдем их сумму: 1+7+5+2+3+5+1+7=31
Найдем сумму цифр, стоящих на четных позициях:
4+1+2+7+8+1+8+8=39
Находим контрольную сумму: 31+39=70 (кратно 10).
Значит, номер карты является действительным.
Проверьте сами!
Реализация алгоритма Луна с помощью MS Excel
Пример работы программы по определению подлинности банковской карты
Программа в MS EXCEL для расчета контрольной цифры
Реализация алгоритма проверки подлинности штрих-кода с помощью MS Excel
Пример определения подлинности штрих-кода
Заключение
- В данной исследовательской работе нами был представлен алгоритм Луна, который использует простое правило вычисления контрольной суммы для проверки идентификационных номеров, рассмотрены примеры его реализации.
- Были написаны программы в MS Excel, позволяющие определить подлинность банковской карты, штрих-кода, расчета контрольных цифр.
- доказана гипотеза: любой номер пластиковой карты или штрих-код товара можно проверить с помощью программы MS Excel
Список литературы
Мир математики: в 40 т: Т.2:Жуан Гомес. Математики, шпионы и хакеры. Кодирование и криптография./Пер. с англ.-М.:Де Агостини, 2014
Алгоритм расчета контрольной цифры.- https://pravo.studio/dengi-dengi/algoritm-rascheta-kontrolnoy-tsifryi-nomera-31517.html
Алгоритм Луна.- https://planetcalc.ru/
Определение контрольной цифры, коды региональных организаций.- https://ru.wikipedia.org/
Организация расчетов с использованием банковских платежных карт.- https://knowledge.allbest.ru/bank/3c0b65625b3ac68a5d53b89421316c27_0.html
Самоучитель Excel.- https://exceltable.com/uroki-excel/samouchitel-excel-s-primerami
Перейти к содержимому
Алгоритм Лу́на (англ. Luhn algorithm) — алгоритм вычисления контрольной цифры номера пластиковых карт в соответствии со стандартом ISO/IEC 7812. Не является криптографическим средством, предназначение алгоритма в первую очередь — выявление ошибок, вызванных непреднамеренным искажением данных (например, при ручном вводе номера карты, при приёме данных о номере социального страхования по телефону). Позволяет лишь с некоторой степенью достоверности судить об отсутствии ошибок в блоке цифр, но не даёт возможности локализации и коррекции обнаруженной неточности.
Алгоритм разработан сотрудником фирмы IBM Гансом Питером Луном, описан в США в 1954 году, патент получен в 1960 году.
Наиболее распространённые применения для подсчёта контрольной цифры:
- Номера всех банковских карт
- Номера некоторых дисконтных карт
- Коды социального страхования
- IMEI-коды.
- Расчёт контрольного знака единого 8-значного номера железнодорожного вагона на РЖД.
В настоящее время содержание алгоритма является публичным достоянием.
Пример подсчета банковской карты:
Алгоритм «Луна» в Excel(с проверкой на валидность):
Бесплатный онлайн инструмент проверки банковских карт, это профессиональный инструмент, который проверит данные номера кредитной карты, покажет от какова банка карта сбербанка, тинькофф или любого другого, ну или просто можете проверить кредитная ли карта.
Первая цифра в номере карты – это платежная система
1 Это различные авиакомпании
2 Тоже авиалинии, а также наша система МИР
3 American Express, Maestro
4 VISA
5 MasterCard, Maestro
6 China UnionPay
7 Топливные компании
8 Предприятия в сфере телекоммуникаций
9 Государственные структуры
То есть по этой первой цифре сразу не определить, к какой конкретной платежной системе относится карта.
Видимо, за исключением цифры 4 – везде упоминается под этим номером только VISA.
Посмотрел на свою дисконтную карту одной из топливных компаний – действительно, начинается на 7.
Источник: http://fishki.net/3069397-pro-strukturu-nomera-bankovskoj-karty-i-algoritm-luna.html
Цифры со 2 по 6 включительно — идентификатор эмитента карты
Есть внутриотраслевые классификаторы – банковские, авиакомпании, топливные – код из которых здесь используется.
Если у вас, например, есть пара карточек от одного и того же банка – посмотрите на эти цифры, наверняка найдете совпадения.
Источник: http://fishki.net/3069397-pro-strukturu-nomera-bankovskoj-karty-i-algoritm-luna.html
16 цифра – контрольная, по алгоритму Луна
И последняя 16 цифра – это цифра для правильности всего комплекса цифр, образующих номер карточки, и эта цифра формируется алгоритмом Луна.
Алгоритм разработан сотрудником IBM Гансом Питером Луном, в 1954 году, запатентован в 1960.
Этот алгоритм не является шифровальным средством, используется только для проверки, правильно ли были указаны цифры номера банковской карты.
Например, вы делаете онлайн-платеж, вводите данные своей карты.
Первое, что наверняка сделает система проверки – это проверит по этому алгоритму, не сделали ли вы случайно ошибку при ручном наборе номера.
Источник: http://fishki.net/3069397-pro-strukturu-nomera-bankovskoj-karty-i-algoritm-luna.html
Примеры для вычисления контрольной цифры
VBA
Num[1..N] — номер карты, Num[N] — контрольная цифра.
sum = 0 for i = 1 to N-1 do p = Num[N-i] if (i mod 2 <> 0) then p = 2*p if (p > 9) then p = p – 9 end if end if sum = sum + p next i //дополнение до 10 sum = 10 – (sum mod 10) if (sum == 10) then sum = 0 end if Num[N] = sum
Java
import java.util.*; import java.lang.String; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.print(“Enter the number: “); String value = scan.next(); int sum1 = 0; int sum2=0; final int nDigits = value.length(); for (int i = nDigits; i> 0; i–){ int digit = Character.getNumericValue(value.charAt(i-1)); int z=digit;int y=digit; if (i % 2 != 0){ z *= 2; if (z > 9) { z -= 9; } sum1 += z; } else sum2 += y; } int sum=sum1+sum2; if (value.length()!=16) sum=1; System.out.println(sum); if (sum%10 == 0){ System.out.println (“Card Valid”); } else { System.out.println(“Card not Valid”); } } }
C
#include <string.h> // заголовок объявляющий функцию strlen() int luhn(const char* card_number) // принимаем в аргументы номер карты { int len = strlen(card_number); // узнаем длину номера карты int number = 0; // текущая цифра в цикле (см. ниже) int check_digit = 0; // переменная которая будет хранить проверочную цифру int i; for(i = 0; i < len; i++) // главный цикл, в процессе него вычисляется проверочная цифра { number = card_number[i] – ‘0’; // переводим цифру из char в int if(i % 2 != 0) // если позиция цифры нечётное, то: { number *= 2; // умножаем цифру на 2 if(number > 9) // согласно алгоритму, ни одно число не должно быть больше 9 { number -= 9; // второй вариант сведения к единичному разряду } } check_digit += number; // прибавляем к check_digit номера согласно алгоритму } return (check_digit * 9) % 10; // возвращаем проверочное число вычисленное согласно алгоритму }
C++
#include <string> int luhn(std::string input) { int number = 0; int check_digit = 0; for(int i = 0; i < input.length(); i++) { number = input[i] – ‘0’; if(i % 2 != 0) { number *= 2; if(number > 9) { number -= 9; } } check_digit += number; } return (check_digit * 9) % 10; }
Источник: http://visacon.ru/stati/13991-algoritm-luna.html
Алгоритм Луна – как это работает
Набросал в Excel таблицу – надо же проверить на своей карте, как это работает, мало ли чего напишут.
Проверил – работает.
Пронумеруем по порядку 16 цифр карты
1 шаг.
Все цифры, стоящие на нечетных местах, т.е. 1,3,5, …15 , умножаем на 2
Все цифры, стоящие на четных местах, т.е. 2,4,6, …, 16, используем дальше как они есть.
Получили ряд из 16 новых цифр-чисел.
2 шаг.
Теперь все полученные числа нужно будет сложить, но сначала нужно сделать так, чтобы все числа в итоговом ряду были только однозначными.
Если какое-то произведение оказалось двузначным, то от него вычитаем 9.
Например, было 12, минус 9, запишем 3.
Или просто записываем это двузначное число как два однозначных. Например, вместо 12 просто запишем две цифры: 1 и 2. При итоговом суммировании это и будет та же цифра 3.
3 шаг.
Все полученные в результате преобразования однозначные числа складываются.
Полученная сумма обязательно должна делиться на 10 нацело.
В нашем примере эта сумма оказалась равна 80.
Если у вас не получилось сумма, которая ровно делится на 10, это не означает, что у вас неправильная карта.
Это означает, что вы где-то ошиблись в расчетах.
Кстати.
В оригинале описания алгоритма нумерация делается справа налево. И этот алгоритм применяется на практике не только для банковских карт с 16-значным номером, но и, например, для 8-значных номеров вагонов РЖД, для номеров сим-карт.
Источник: http://fishki.net/3069397-pro-strukturu-nomera-bankovskoj-karty-i-algoritm-luna.html
Источники информации
- U.S. Patent 2 950 048 Computer for Verifying Numbers, Hans P. Luhn, August 23, 1960.
Источник: http://dic.academic.ru/dic.nsf/ruwiki/255031
внешние ссылки
- Реализация на 88 языках в проекте Rosetta Code
Источник: http://ru.abcdef.wiki/wiki/Luhn_algorithm
Бонус – номер вагона РЖД
Алгоритм Луна используется в различных областях, где есть необходимость какой-либо нумерации.
Например, РЖД использует этот механизм для контроля нумерации вагонов.
То есть алгоритм. в принципе, может работать с последовательностями цифр различной длины.
Источник: http://fishki.net/3069397-pro-strukturu-nomera-bankovskoj-karty-i-algoritm-luna.html
А также в нумерации сим-карт
Если вы посмотрите на номер своей сим-карты – он обязательно будет начинаться с 89.
В любой стране.
Источник: http://fishki.net/3069397-pro-strukturu-nomera-bankovskoj-karty-i-algoritm-luna.html
( 1 оценка, среднее 5 из 5 )
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
‘ Version 1.0.0 | |
‘ You may use these functions directly in Excel: «=luhnCheck(A55)» | |
‘ probably only needed internally | |
Function luhnSum(InVal As String) As Integer | |
Dim evenSum As Integer | |
Dim oddSum As Integer | |
evenSum = 0 | |
oddSum = 0 | |
Dim strLen As Integer | |
strLen = Len(InVal) | |
Dim i As Integer | |
For i = strLen To 1 Step —1 | |
Dim digit As Integer | |
digit = CInt(Mid(InVal, i, 1)) | |
If ((i Mod 2) = 0) Then | |
oddSum = oddSum + digit | |
Else | |
digit = digit * 2 | |
If (digit > 9) Then | |
digit = digit — 9 | |
End If | |
evenSum = evenSum + digit | |
End If | |
Next i | |
luhnSum = (oddSum + evenSum) | |
End Function | |
‘ for the curious | |
Function luhnCheckSum(InVal As String) | |
luhnCheckSum = luhnSum(InVal) Mod 10 | |
End Function | |
‘ true/false check | |
Function luhnCheck(InVal As String) | |
luhnCheck = (luhnSum(InVal) Mod 10) = 0 | |
End Function | |
‘ returns a number which, appended to the InVal, turns the composed number into a valid luhn number | |
Function luhnNext(InVal As String) | |
Dim luhnCheckSumRes | |
luhnCheckSumRes = luhnCheckSum(InVal) | |
If (luhnCheckSumRes = 0) Then | |
luhnNext = 0 | |
Else | |
luhnNext = ((10 — luhnCheckSumRes)) | |
End If | |
End Function |
Логично предположить, что номер карты, и не только банковской, а например, топливной – это не совсем случайный набор цифр, что есть некая система.
Вот здесь об этом и рассказывается.
Если раньше об этом не знали и любопытно взглянуть – заходите.
Первая цифра в номере карты — это платежная система
1 Это различные авиакомпании
2 Тоже авиалинии, а также наша система МИР
3 American Express, Maestro
4 VISA
5 MasterCard, Maestro
6 China UnionPay
7 Топливные компании
8 Предприятия в сфере телекоммуникаций
9 Государственные структуры
То есть по этой первой цифре сразу не определить, к какой конкретной платежной системе относится карта.
Видимо, за исключением цифры 4 – везде упоминается под этим номером только VISA.
Посмотрел на свою дисконтную карту одной из топливных компаний – действительно, начинается на 7.
Цифры со 2 по 6 включительно — идентификатор эмитента карты
Есть внутриотраслевые классификаторы — банковские, авиакомпании, топливные — код из которых здесь используется.
Если у вас, например, есть пара карточек от одного и того же банка — посмотрите на эти цифры, наверняка найдете совпадения.
Цифры с 7 по 15 — идентификатор клиента
В этом идентификаторе зашит и банковский продукт, который соответствует данной карте — дебетовая и или кредитная, код валюты — и собственно индивидуальный номер данной конкретной карты.
16 цифра — контрольная, по алгоритму Луна
И последняя 16 цифра – это цифра для правильности всего комплекса цифр, образующих номер карточки, и эта цифра формируется алгоритмом Луна.
Алгоритм разработан сотрудником IBM Гансом Питером Луном, в 1954 году, запатентован в 1960.
Этот алгоритм не является шифровальным средством, используется только для проверки, правильно ли были указаны цифры номера банковской карты.
Например, вы делаете онлайн-платеж, вводите данные своей карты.
Первое, что наверняка сделает система проверки — это проверит по этому алгоритму, не сделали ли вы случайно ошибку при ручном наборе номера.
Алгоритм Луна — как это работает
Набросал в Excel таблицу — надо же проверить на своей карте, как это работает, мало ли чего напишут.
Проверил — работает.
Пронумеруем по порядку 16 цифр карты
1 шаг.
Все цифры, стоящие на нечетных местах, т.е. 1,3,5, …15 , умножаем на 2
Все цифры, стоящие на четных местах, т.е. 2,4,6, …, 16, используем дальше как они есть.
Получили ряд из 16 новых цифр-чисел.
2 шаг.
Теперь все полученные числа нужно будет сложить, но сначала нужно сделать так, чтобы все числа в итоговом ряду были только однозначными.
Если какое-то произведение оказалось двузначным, то от него вычитаем 9.
Например, было 12, минус 9, запишем 3.
Или просто записываем это двузначное число как два однозначных. Например, вместо 12 просто запишем две цифры: 1 и 2. При итоговом суммировании это и будет та же цифра 3.
3 шаг.
Все полученные в результате преобразования однозначные числа складываются.
Полученная сумма обязательно должна делиться на 10 нацело.
В нашем примере эта сумма оказалась равна 80.
Если у вас не получилось сумма, которая ровно делится на 10, это не означает, что у вас неправильная карта.
Это означает, что вы где-то ошиблись в расчетах.
Кстати.
В оригинале описания алгоритма нумерация делается справа налево. И этот алгоритм применяется на практике не только для банковских карт с 16-значным номером, но и, например, для 8-значных номеров вагонов РЖД, для номеров сим-карт.
Никому не говорите номер свой карты
Обычно при совершении онлайн-платежей в СМС-ке одновременно с подтверждающим кодом автоматом приходит предупреждение, типа, никому не сообщайте этот код и номер карты, так как вокруг могут быть мошенники.
Сейчас многие банки обновили предупреждение — если раньше допускалась такая возможность, то сейчас об этом говорится прямо:
«Если у вас спрашивают код или номер карты — это мошенники!»
Бонус — номер вагона РЖД
Алгоритм Луна используется в различных областях, где есть необходимость какой-либо нумерации.
Например, РЖД использует этот механизм для контроля нумерации вагонов.
То есть алгоритм. в принципе, может работать с последовательностями цифр различной длины.
А также в нумерации сим-карт
Если вы посмотрите на номер своей сим-карты — он обязательно будет начинаться с 89.
В любой стране.