Slijedi rješenje u PL\SQL - u:
1. Funkcija za ispitivanje validnosti:
function validacijaPoModulu11(MB varchar2) return boolean is
rezultat integer;
ostatak integer;
razlika integer;
praviMB varchar2(13);
ind boolean;
begin
if length(MB) <= 13 then
if length(MB) = 13 then
rezultat := to_number(substr(MB,1,1)) * 7 + to_number(substr(MB,2,1)) * 6 + to_number(substr(MB,3,1)) * 5 + to_number(substr(MB,4,1)) * 4 + to_number(substr(MB,5,1)) * 3 + to_number(substr(MB,6,1)) * 2 + to_number(substr(MB,7,1)) * 7 + to_number(substr(MB,8,1)) * 6 + to_number(substr(MB,9,1)) * 5 + to_number(substr(MB,10,1)) * 4 + to_number(substr(MB,11,1)) * 3 + to_number(substr(MB,12,1)) * 2;
ostatak := mod(rezultat,11);
razlika := 11 - ostatak;
if ostatak = 1 then
ind := false;
end if;
if ostatak = 0 then
if to_number(substr(MB,13,1)) <> 0 then
ind := false;
else
ind := true;
end if;
end if;
if (ostatak > 1 and ostatak < 11) then
if to_number(substr(MB,13,1)) <> razlika then
ind := false;
else
ind := true;
end if;
end if;
end if;
if length(MB) = 8 then
rezultat := to_number(substr(MB,1,1)) * 8 + to_number(substr(MB,2,1)) * 7 + to_number(substr(MB,3,1)) * 6 + to_number(substr(MB,4,1)) * 5 + to_number(substr(MB,5,1)) * 4 + to_number(substr(MB,6,1)) * 3 + to_number(substr(MB,7,1)) * 2;
ostatak := mod(rezultat,11);
razlika := 11 - ostatak;
if ostatak = 1 then
if to_number(substr(MB,8,1)) <> 0 then
ind := false;
else
ind := true;
end if;
end if;
if ostatak = 0 then
ind := false;
end if;
if (ostatak > 1 and ostatak < 11) then
if to_number(substr(MB,8,1)) <> razlika then
ind := false;
else
ind := true;
end if;
end if;
end if;
else
ind := false;
end if;
return ind;
end validacijaPoModulu11;