function CheckCtrlKey( aNLs : string; aMfo : real ) : boolean;
const{12345678901234567890xxx}
msk : string[28]= '71371371371371371371713';
var
i : byte;
s : integer;
nls : string[28];
bic : string[10];
begin
bic := LeftPad( Real0Str( aMfo, 9, 0 ), 9 );
if bic[7] < > '0' then{< =Простая проверка -- это РКЦ?}{ не учитывает ГРКЦ }
nls := bic[7]+bic[8]+bic[9]
else
nls := '0'+ bic[5]+bic[6]; { РКЦ }
nls := aNLs + nls;
s:= 0;
for i := 1 to 23 do
s := s + ( ( (byte(nls[i])-48) * (byte(msk[i])-48) ) mod 10 );
s := s mod 10;
CheckCtrlKey := s = 0;
end;
Функция Delphi CheckCtrlKey предназначена для генерации банковского ключа на основе вводных значений aNLs (строка) и aMfo (число с плавающей точкой). Банк key вычисляется с помощью конкретного алгоритма, который涉гивает манипуляцию входными строками и числами. Вот шаг за шагом, что код делает:
Он конвертирует значение aMfo в строку с 9 цифрами, добавляя нули, если необходимо, и хранит ее в переменной bic.
Если 7-й символ строки bic не равен '0', функция предполагает, что это RKC (Русский код валюты) и извлекает последние три символа (nls) как bic[7]+bic[8]+bic[9].
В противном случае, если 7-й символ равен '0', функция предполагает, что это RKC и извлекает последние два символа (nls) как '0'+ bic[5]+bic[6].
Функция конкатенирует строку aNLs с извлеченным значением nls, чтобы образовать новую строку.
Затем код вычисляет сумму произведений каждого символа в новой строке и соответствующего символа в строке msk (которая жестко закодирована как 28-символьная строка). Результат делится на 10, и остаток хранится в переменной s.
Наконец, функция возвращает true, если вычисленное значение s равно 0; иначе, она возвращает false.
Код также включает комментарии, которые указывают на потенциальные проблемы с реализацией:
Он не учитывает случай GRKCT (Global Russian Currency Code).
Комментарий < <=Простая проверка -- это РКЦ? предполагает, что может быть более простым способом проверки, является ли это RKC.
В отношении улучшений следующие предложения:
Следует использовать более описательные имена переменных вместо aNLs, aMfo и msk.
Добавьте больше комментариев, чтобы объяснить алгоритм и его предположения.
Если возможно, рассмотрите валидацию вводных значений для обеспечения соответствия ожидаемым форматам.
Если вы хотите сделать код более устойчивым, можно добавить обработку ошибок для случаев, когда значения ввода недопустимы или не могут быть обработаны.
В целом, эта функция appears to be an implementation of a specific bank key generation algorithm, and its purpose is likely limited to generating a specific type of key based on user input.
Создание банковского ключа - функция, которая генерирует контрольную сумму на основе номера лицевого счета (НЛС) и кода МФО.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.