Валидация счёта Яндекс.Деньги

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.

Использование валидатора и подключение к форме HTML страницы

В заголовке HEAD укажите ссылку на скрипт
<script src="https://clck.ru/9wzoU"></script>

Валидация номера счёта выполняется функцией AccountNumberRedundancy(N) принимающей строковый аргумент N и возвращающей Boolean значение. Для проверки счёта Яндекс.Деньги, используйте функцию validationYM(N). Обе функции должны вызываться с аргументом содержащим только символы десятичных цифр.

Пример проверки содержания INPUT на этой страницы
<input size="50" style="text-align: center;" placeholder="Введите счёт Яндекс.Деньги и нажмите Enter"
 onchange="this.value=this.value.match(/[0-9]{1,33}/);
           alert(validationYM(this.value)?
             &quot;Вероятно, это валидный счёт Яндекс.Деньги.&quot;:
             &quot;Ошибка!\n\&quot;&quot;+this.value+&quot;\&quot; - не является счётом Яндекс.Деньги.&quot;
           );
          "
>

Связь с автором возможна по контактам в скрипте, или по ссылке на форум со страницы Разработка скрипта калькулятора.