Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Co jest zle ? Weryfikacja NIPU w PL/SQL - ORACLE, Bład w procedurze weryfikacja nip plsql
chyzio
post 29.04.2006, 17:33:18
Post #1





Grupa: Zarejestrowani
Postów: 93
Pomógł: 0
Dołączył: 12.03.2006

Ostrzeżenie: (0%)
-----


W php wyglada to tak:
  1. <?php
  2. # zwraca 1 gdy NIP jest poprawny
  3.  
  4. function check_nip($nip)
  5. {
  6. // tworzenie tablicy wag
  7. $wagi = array(6, 5, 7, 2, 3, 4, 5, 6, 7);
  8.  
  9. if (strlen($nip) != 10) return 0;
  10.  
  11. // tworzenie sumy iloczynów
  12. for ($x = 0; $x < 9; $x++) 
  13. $suma_calosc += $wagi[$x] * $nip[$x];
  14.  
  15. $sum_m = $suma_calosc % 11;
  16.  
  17. if ($sum_m == 10) $sum_m = 0; //*
  18. if ($sum_m == $nip[9]) return 1;
  19.  
  20. return 0;
  21. }
  22.  
  23. // sposób wykorzystania
  24. #if (check_nip('768-000-24-66')) echo 'NIP poprawny';
  25. if (check_nip('768-000-24-66')) echo 'NIP poprawny';
  26. else echo'Błędny NIP';
  27. ?>


W PL/SQL:

  1. CREATE OR REPLACE PROCEDURE NIP(p_NIP IN NUMBER) IS
  2.  
  3. TYPE z_Wagi IS ARRAY(9) OF NUMBER;
  4. Zmienna_wag z_Wagi:= z_Wagi(6, 5, 7, 2, 3, 4, 5, 6, 7);
  5. z_Suma_calosc NUMBER;
  6. z_Suma_m NUMBER;
  7. z_Licz NUMBER;
  8. w_Zly_NIP EXCEPTION;
  9.  
  10. BEGIN IF (LENGTH(p_NIP) != 10) THEN RAISE w_Zly_NIP;
  11.  
  12. z_Licz :=0;
  13.  
  14. LOOP
  15.  
  16. z_Licz:= z_Licz + 1;
  17. z_Suma_calosc := ((Zmienna_wag(z_Licz) * SUBSTR('p_NIP',z_Licz,1))+ z_Suma_calosc);
  18. IF z_Licz >9 THEN
  19. EXIT;
  20. END IF;
  21.  
  22. END LOOP;
  23.  
  24. z_Suma_m := MOD(z_Suma_calosc,11);
  25.  
  26. IF (z_Suma_m = 10) THEN z_Suma_m := 0;
  27. IF (z_Suma_m = SUBSTR(p_NIP,9,1)) THEN DBMS_OUTPUT.PUT_LINE('Prawidłowy NIP');
  28. else RAISE w_Zly_NIP;
  29. END IF;
  30. END IF;
  31. END IF;
  32.  
  33. -- obsługa wyjatkow
  34. EXCEPTION
  35.  
  36. WHEN w_Zly_NIP THEN
  37. DBMS_OUTPUT.PUT_LINE('BŁĄD : Podany NIP jest nieprawidlowy !');
  38. WHEN OTHERS THEN
  39. DBMS_OUTPUT.PUT_LINE ('NIEOCZEKIWANY BŁĄD !!! ');
  40. DBMS_OUTPUT.PUT_LINE ('KOD BŁDU : '||SQLCODE);
  41. DBMS_OUTPUT.PUT_LINE (''||SQLERRM(SQLCODE));
  42.  
  43.  
  44. END NIP;


Cos jest zle w tej procedurze PL/SQL'a bo przyjmuje takze nieprawidlowy NIP!
Moze ktos wie gdzie jest blad??


Pozdrawiam
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 3.05.2025 - 04:21