W php wyglada to tak:<?php
# zwraca 1 gdy NIP jest poprawny
function check_nip($nip)
{
// tworzenie tablicy wag
$wagi = array(6
, 5
, 7
, 2
, 3
, 4
, 5
, 6
, 7
);
if (strlen($nip) != 10
) return 0;
// tworzenie sumy iloczynów
for ($x = 0; $x < 9; $x++)
$suma_calosc += $wagi[$x] * $nip[$x];
$sum_m = $suma_calosc % 11;
if ($sum_m == 10) $sum_m = 0; //*
if ($sum_m == $nip[9]) return 1;
return 0;
}
// sposób wykorzystania
#if (check_nip('768-000-24-66')) echo 'NIP poprawny';
if (check_nip
('768-000-24-66')) echo 'NIP poprawny'; ?>
W PL/SQL:
CREATE OR REPLACE PROCEDURE NIP(p_NIP IN NUMBER) IS
TYPE z_Wagi IS ARRAY(9) OF NUMBER;
Zmienna_wag z_Wagi:= z_Wagi(6, 5, 7, 2, 3, 4, 5, 6, 7);
z_Suma_calosc NUMBER;
z_Suma_m NUMBER;
z_Licz NUMBER;
w_Zly_NIP EXCEPTION;
BEGIN IF (LENGTH(p_NIP) != 10) THEN RAISE w_Zly_NIP;
z_Licz :=0;
LOOP
z_Licz:= z_Licz + 1;
z_Suma_calosc := ((Zmienna_wag(z_Licz) * SUBSTR('p_NIP',z_Licz,1))+ z_Suma_calosc);
IF z_Licz >9 THEN
EXIT;
END IF;
END LOOP;
z_Suma_m := MOD(z_Suma_calosc,11);
IF (z_Suma_m = 10) THEN z_Suma_m := 0;
IF (z_Suma_m = SUBSTR(p_NIP,9,1)) THEN DBMS_OUTPUT.PUT_LINE('Prawidłowy NIP');
else RAISE w_Zly_NIP;
END IF;
END IF;
END IF;
-- obsługa wyjatkow
EXCEPTION
WHEN w_Zly_NIP THEN
DBMS_OUTPUT.PUT_LINE('BŁĄD : Podany NIP jest nieprawidlowy !');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE ('NIEOCZEKIWANY BŁĄD !!! ');
DBMS_OUTPUT.PUT_LINE ('KOD BŁDU : '||SQLCODE);
DBMS_OUTPUT.PUT_LINE (''||SQLERRM(SQLCODE));
END NIP;
Cos jest zle w tej procedurze PL/SQL'a bo przyjmuje takze nieprawidlowy NIP!
Moze ktos wie gdzie jest blad??Pozdrawiam