Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wzajemne wyłączanie i walidacja 3 pól
Forum PHP.pl > Forum > PHP
hhg
mam problem z instrukcją warunkową która sprawdza czy
- jest wypełnione pole (nip i regon) albo pesel - nawias w tym wypadku oznacza ze te pola maja byc wypelnione razem w przeciwnym razie sam pesel
- numeryczna postac nip, pesel, regon
- dlugosc nip to 10 znakow, dlugosc pesla to 11 znaków a dlugosc regonu to 9 znaków

moja propozycja to

  1. <?php
  2. if (
  3. (
  4. ( empty($_POST['nip_id']) && empty($_POST['regon_id']) && empty($_POST['pesel_id']) ) ||
  5. ( empty($_POST['nip_id']) && !empty($_POST['regon_id']) && empty($_POST['pesel_id']) ) ||
  6. ( !empty($_POST['nip_id']) && empty($_POST['regon_id']) && empty($_POST['pesel_id']) ) ||
  7. ( !empty($_POST['nip_id']) && !empty($_POST['regon_id']) && !empty($_POST['pesel_id']) ) ||
  8. ( !empty($_POST['nip_id']) && empty($_POST['regon_id']) && !empty($_POST['pesel_id']) ) ||
  9. ( empty($_POST['nip_id']) && !empty($_POST['regon_id']) && !empty($_POST['pesel_id']) ) 
  10. ) &&
  11. is_numeric($_POST['nip_id']) && is_numeric($_POST['regon_id']) && is_numeric($_POST['pesel_id']) &&
  12. (strlen($_POST['nip_id']) == 10) && (strlen($_POST['pesel_id']) == 11) && (strlen($_POST['regon_id']) == 9)
  13.  
  14. ) {
  15. ?>


domyslam sie ze zaproponujecie krotszy zapis z !empty ale ten tez powinien dzialac

wszystko wyglada logicznie ale w rzeczywistosci jezeli wpiszę za regon i nip wartosci '5' i '5' to formularz to przepuszcza :/

prosze o pomoc..
artur81
Trochę odbiegając od tematu na tej stronie masz funkcje do walidacji numerów nip, pesel i regon. Może Ci się przydadzą.
planet_x
Jejku strasznie długi i niezrozumiały ten kod

moja propozycja po łepkach

  1. <?php
  2. function validate_regon($regon) {
  3.  if($regon) && (spełnione warunki dla regonu długość i suma kontrolna) 
  4.  return true;
  5.  else return false;
  6.  
  7. }
  8.  
  9.  
  10. function validate_nip($nip) {
  11.  if($nip) && (spełnione warunki dla nipu długość i suma kontrolna) 
  12.  return true;
  13.  else return false;
  14. }
  15.  
  16.  
  17. function validate_pesel($pesel) {
  18.  if($pesel) && (spełnione warunki dla pesla długość i suma kontrolna) 
  19.  return true;
  20.  else return false;
  21.  
  22. }
  23.  
  24. if ((validate_regon($_POST['regon_id']) && validate_nip($_POST['nip_id'])) || validate_pesel($_POST['pesel_id'])) {
  25.  
  26.  ... spełnione warunki wykonaj kod
  27.  
  28. }
  29. ?>


Może być błąd bo szybko pisałem musisz poddać w funkcjach dane do validacji a to bardziej skomplikowane bo długość to nie wszystko (i str_len tu niewystarczy) poszukaj artykułów o tym jakie warunki mają te dane spełniać i co jak obliczyć

pogrzebałem jeszcze troszeczkę i znalazłem to napewno ci sie przyda
Dla identyfikatora NIP
wagi wynoszą kolejno 6,5,7,2,3,4,5,6,7 Modulo 11
(i nie odejmujemy już tej wartości od 10!)
Przykład dla numeru identyfikacyjnego NIP 768-000-24-66

6 5 7 2 3 4 5 6 7 -> wagi
* 7 6 8 0 0 0 2 4 6 -> nr NIP (bez cyfry kontr.)
---------------------
suma= (6*7+5*6+7*8+2*0+3*0+4*0+5*2+6*4+7*6)=
= ( 42+ 30+ 56+ 0+ 0+ 0+ 10+ 24+ 42)= 204

204 mod 11 = 6 ----> cyfra kontrolna

Dla identyfikatora REGON 7-mio cyfrowego
wagi wynoszą kolejno 2,3,4,5,6,7

Dla identyfikatora REGON 9-cio cyfrowego
wagi wynoszą kolejno 8,9,2,3,4,5,6,7
sumę dzielimy Modulo 11
Przykład dla numeru identyfikacyjnego REGON 590096454

8 9 2 3 4 5 6 7 -> wagi
* 5 9 0 0 9 6 4 5 -> nr REGON (bez cyfry kontr.)
-------------------
suma= (8*5+9*9+2*0+3*0+4*9+5*6+6*4+7*5)=
= ( 40+ 81+ 0+ 0+ 36+ 30+ 24+ 35)= 246

246 mod 11 = 4 ----> cyfra kontrolna

Uwaga:
warto zauważyć, że wynik dzielenia modulo 11 może wyjść 10.
Ponieważ cyfry "10" brak (a znaku X jak w numerze ISBN się
tu nie stosuje) to w tym przypadku jako cyfrę kontrolną
należy przyjąć 0.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.