Страницы: 1
RSS
Алгоритм Луна. Получить следующее значение
 
Нужна помощь в написании формулы\макроса по алгоритму Луна.
есть 18 цифр и мне нужно получить 19ое число по этому алгоритму. На просторах инета нашёл только формулы для проверки на ложь\истину контрольного числа.Мне же нужно чтобы контрольное число генерировалось и подставлялось.

Вот формула истина\ложь:
Код
=ОСТАТ(СУММ(ПСТР(B2;{1:2:3:4:5:6:7:8}*2-{1;0};1)*{2;1}-(ПСТР(B2;{1:2:3:4:5:6:7:8}*2-{1;0};1)*{2;1}>9)*9);10)=0

нашёл макрос:
Код
Function Luna(num$) As Boolean
    Dim i%, sum%, p%
    For i = 1 To Len(num)
        p% = Val(Mid(num, i, 1))
        If i Mod 2 Then sum = sum + p * 2 Mod 9 Else sum = sum + p
    Next i
    Luna = sum Mod 10 = 0
End Function 
но он тоже проверяет на ложь, истина......
Изменено: vikttur - 14.07.2021 12:53:54
 
На просторах интернета, там, откуда эти формула и код, в первом сообщении ссылка на Википедию, статья "Алгоритм Луна". В ней есть раздел "Алгоритм вычисления контрольной цифры". Первый алгоритм после элементарного допиливания под VBA считает контрольную цифру.
Удачи
F1 творит чудеса
 
Алгоритм Луна для проверки IMEI номера (15-значного).
Результат - Истина/Ложь

Код
=ОСТАТ(СУММ(ПСТР(A2;{1:2:3:4:5:6:7}*2-{0;1};1)*{2;1}-(ПСТР(A2;{1:2:3:4:5:6:7}*2-{0;1};1)*{2;1}>9)*9;ПРАВСИМВ(A2;1));10)=0
 
Цитата
secundus написал: Мне же нужно чтобы контрольное число генерировалось и подставлялось.
Расчет 19-го знака по алгоритму Луна по известным первым 18 знакам можно выполнить так:
Код
=ОКРУГЛВВЕРХ(СУММ(ПСТР(A2;{1:2:3:4:5:6:7:8:9}*2-{0;1};1)*{2;1}-(ПСТР(A2;{1:2:3:4:5:6:7:8:9}*2-{0;1};1)*{2;1}>9)*9);-1)-СУММ(ПСТР(A2;{1:2:3:4:5:6:7:8:9}*2-{0;1};1)*{2;1}-(ПСТР(A2;{1:2:3:4:5:6:7:8:9}*2-{0;1};1)*{2;1}>9)*9)

затем объединить строки
Код
=A2&B2
 
Подскажите пожалуйста, как сделать подсчет контрольного числа имея число из 25 символов, формулу дописал, 24 считает, 25 отказывается постоянно выдает: #ЗНАЧ!
 
Вариант на Power Query для чисел произвольной длины.
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
    AddedCustom = Table.AddColumn(Source, "Luhn algorithm", each 
        [list = List.Transform( Text.ToList( Text.Reverse( Text.From( [Base Number] ) ) ), Number.From ),
         calc = List.Transform( List.Alternate( list, 1, 1, 1 ), (x) => x * 2 - 9 * Number.From( x > 4 ) ),
         out = Number.Mod( 10 - Number.Mod( List.Sum( calc & List.Alternate( list, 1, 1 ) ), 10 ), 10 )][out])
in
    AddedCustom

Прогнал на массиве 230 тыс строк сформированных рандомно чисел, отработал за 4 секунды.
Изменено: PooHkrd - 17.01.2020 17:44:44
Вот горшок пустой, он предмет простой...
 
Кто может подсказать решение?
Дано: неполный номер банковской карты формата 1234 56ХХ ХХХХ 7890
Требуется выдать все возможные варианты написания.

Сколько их будет всего?  
Изменено: vikttur - 14.07.2021 12:55:37
 
Цитата
Dody Fischer написал:
Сколько их будет всего?  
Ноль
 
Цитата
Dody Fischer написал:
Сколько их будет всего?
не поверите! ровно 100 тысяч шт.
000007
000015
000023
000031
000049
000056
000064
000072
000080
000098
000106
и т.д.)
Изменено: Ігор Гончаренко - 14.07.2021 04:05:29
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
цитируйте, когда это необходимо [МОДЕРАТОР]

Интересно!
как вы посчитали? сумма по алгоритму должна заканчиваться определенным числом. например сумма возможных вариантов должна быть 6, 16, 26, 36 или 46  
Изменено: vikttur - 15.07.2021 20:34:12
 
Dody Fischer, Вы БОГ цитирования! =)))

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Dody Fischer,
вы дали такой неполный номер карты:: 1234 56ХХ ХХХХ 7890
подставляете в эту карту вместо ХХХХХХ написанные выше 11 вариантов
1)   1234 5600 0007 7890 - правильный номер карты?
2)   1234 5600 0015 7890 - правильный номер карты?
....
11) 1234 5600 0106 7890 - правильный номер карты?
и так еще 99989 раз)
первых 11 номеров я вам написал, остальные 99989 запомнил))
Изменено: Ігор Гончаренко - 15.07.2021 19:41:03
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Страницы: 1
Наверх