JavaScript функция проверки счёта Яндекс.Деньги по контрольной сумме. В принципе, формула валидации не оригинальна, но где ещё применяется, автор не в курсе дела. Вероятно, повторяется в системах идущих от PayCash.
ABCD - номер счёта Яндекс.Деньги. Буквы обозначают группы цифр.
Счёт Яндекс.Деньги начинается с 41001. На 2016 год содержит от 13 до 16 чисел. В некоторых источниках указывается минимальная длина счёта 11 цифр. Есть счёт 41001000040 от которого можно получить тестовое уведомление по HTTP о переводе. Представляемый алгоритм проверки ограничивает группу C 20-ю символами.
Группы B и C считаются строками символов и для следующего расчёта дополняются символами нуля слева: B - до 10 символов; C - до 20 символов.
Выполняется конкатенация строк B и C - BC. Строка BC представляет числовой ряд Ki, в котором нули заменены на 10, а все остальные цифры представляют однозначные числа.
Набор суммы ряда и вычисление контрольной суммы: D=(ΣKi*1332-i) mod 99 + 1, i=1÷30. В практической программе, непосредственное возведение в степень приведёт к потери младших разрядов. По этому, целесообразно выполнять вычисление подобно схеме Горнера для многочленов и на каждой итерации вычислять остаток деления на 99.
<script src="https://clck.ru/9wzoU"></script>
Валидация номера счёта выполняется функцией AccountNumberRedundancy(N) принимающей строковый аргумент N и возвращающей Boolean значение. Для проверки счёта Яндекс.Деньги, используйте функцию validationYM(N). Обе функции должны вызываться с аргументом содержащим только символы десятичных цифр.
<input size="50" style="text-align: center;" placeholder="Введите счёт Яндекс.Деньги и нажмите Enter" onchange="this.value=this.value.match(/[0-9]{1,33}/); alert(validationYM(this.value)? "Вероятно, это валидный счёт Яндекс.Деньги.": "Ошибка!\n\""+this.value+"\" - не является счётом Яндекс.Деньги." ); " >
Связь с автором возможна по контактам в скрипте, или по ссылке на форум со страницы Разработка скрипта калькулятора.