<?php # zwraca 1 gdy NIP jest poprawny function check_nip($nip) { // tworzenie tablicy wag // 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'; ?>
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