Выполняет проверку номера счета в системе Яндекс.Деньги по заданному алгоритму проверки действительности строки, представляющей номер счета.
Номер счета в Системе имеет следующий формат NXYZ (пример — 41001123456789),где:
- N — количество цифр в коде процессингового центра.
- X — код процессингового центра в Системе. Возможные значения: 1001 — процессинговый центр для валюты 643 (рубли); 1003 — процессинговый центр для валюты 10643 (тестовая валюта, демо-рублики).
- Y — номер счета в процессинговом центре Системы.
- последние две цифры это контрольная сумма, которая вычисляется специальной функцией от предшествующей части номера счета, и позволяет выявлять случайные ошибки при вводе номера счета.
Для процессингового центра 1001 минимально возможная длина счета 11 цифр (1 + 4 + 4 + 2), максимально возможная длина счета 26 цифр (1 + 4 + 19 + 2). Длина существующих на данный момент номеров счетов варьируется от 11 до 16 цифр.
Под разбором строки будем понимать определение X, Y и Z по заданному E=NXYZ.
- Если строка E пуста или содержит символы, отличные от цифр, то разбор невозможен и строка недействительна.
- Если первая цифра E равна 0, то разбор невозможен и строка недействительна, в противном случае N = первая цифра E.
- Если длина E меньше N+4, то разбор невозможен и строка недействительна.
- Если две последние цифры строки E равны "00", то строка недействительна.
- Если выполнены условия 1-4, то строка E может быть разобрана и: X = N цифр E, начиная со второй; Z = две последних цифры E; Y = оставшиеся цифры E.
- Если длина Y больше 20, то строка недействительна.
- Если AccountNumberRedundancy (X,Y) не равно Z, то строка недействительна.
При вычислении функции AccountNumberRedundancy строка X записывается как последовательность 10 десятичных цифр: X = X9 X8 … X0 Пример: для X = 67458
X0 = 8 X1 = 5 X2 = 4 X3 = 7 X4 = 6 X5 = 0 X6 = 0 X7 = 0 X8 = 0 X9 = 0
При вычислении функции AccountNumberRedundancy строка Y записывается как последовательность 20 десятичных цифр: Y = Y19 Y18 … Y0 Пример: для Y = 3285076
Y0 = 6 Y1 = 7 Y2 = 0 Y3 = 5 Y4 = 8 Y5 = 2 Y6 = 3
Y7 = 0 Y8 = 0 Y9 = 0 Y10 = 0 Y11 = 0 Y12 = 0 Y13 = 0
Y14 = 0 Y15 = 0 Y16 = 0 Y17 = 0 Y18 = 0 Y19 = 0
Важно! Нули слева в X и Y, которые являются незначащими с точки зрения десятичной записи X и Y, пропускать НЕЛЬЗЯ.
После этого функции AccountNumberRedundancy(X,Y) вычисляется следующим образом:
[T0x(13)2 + T1x(13)3 + … + T19x(13)21 + T20x(13)22 + T21x(13)23 +… + T29x(13)31] mod 99 + 1
, где:
- Ti = Yi, если Yi != 0; и Ti = 10, если Yi = 0 (I=0,1,…,19)
- Ti = X(i-20), если X(i-20) != 0; и Ti = 10, если X(i-20) = 0 (I=20,21,…,29)
- То есть все 0 заменяются на 10.
При этом ответ представляет собой строку из ДВУХ десятичных цифр (например, если получилось число 5, то в ответе нужно записать ‘05’).