|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Alexander V. Gaiduk 2:5020/400 15 Feb 2001 18:24:24 To : All Subject : Re: Валидность счета -------------------------------------------------------------------------------- >> В России банковский расчетный счет состоит из 20 цифр. >> Есть ли какой-то алгоритм проверки валидности номера счета? >> >>-- Hиколай. >>ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД > > >Есть такое понятие как ключ банковского счета. Он >однозначно определяет правильность счета и завязан >на БИК банка. Подробности мылом. сорри, за наглый оффтоп, но переписывать на Perl паскалешную функцию слишком лениво было. Кому надо разберуться: ================================================== function CalkAccKey(Bic, Acc : ShortString) : Integer; function CheckLegal(A : ShortString) : Boolean; var i : Byte; begin CheckLegal := False; for i := 1 to 20 do if not (A[i] in ['0'..'9']) then Exit; CheckLegal := True; end; function C2D(C : Char) : Byte; var Cd : Integer; B : Byte; begin Val(C, B, Cd); C2D := B; end; function CalcSmall(A, B : Char) : Byte; begin CalcSmall := (C2D(A) * C2D(B)) mod 10; end; const VK : String[23] = '71371371371371371371371'; var Key : String[1]; CAcc : String[23]; Sa : Word; i : Byte; begin CalkAccKey := -4; if Length(Bic) <> 3 then Exit; CalkAccKey := -3; if Length(Acc) <> 20 then Exit; CalkAccKey := -2; if not CheckLegal(Acc) then Exit; Key := Acc[9]; Acc[9] := '0'; Sa := 0; CAcc := Bic + Acc; for i := 1 to 23 do Sa := Sa + CalcSmall(VK[i], CAcc[i]); Sa := Sa mod 10; Sa := Sa * 3; Sa := Sa mod 10; CalkAccKey := -1; if Key <> Char(Sa + Byte('0')) then Exit; CalkAccKey := 0; end; ================================================== где: Bic - три последних цыфры БИКа Acc - сам проверяемый счет писал давно, уже и не помню как это оно работает. HО РАБОТАЕТ ! =GAV --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/393149ddb780.html, оценка из 5, голосов 10
|