Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Walidacja numeru Pesel php

suromarek 16 Lip 2011 19:17 2821 14
  • #1 16 Lip 2011 19:17
    suromarek
    Poziom 10  

    Cytat:


    #include <stdio.h>

    int main(int argc, char *argv[])
    {
    int a, b, c, d, e, f, g, h, i, j, k, sum, wynik;
    char Pesel[12];

    // wpisuje nr PESEL
    printf("Podaj nr PESEL: ");
    scanf("%s",Pesel);

    // nadaje zmiennym odpowiednie wartosci
    a=Pesel[0] - '0';
    b=Pesel[1] - '0';
    c=Pesel[2] - '0';
    d=Pesel[3] - '0';
    e=Pesel[4] - '0';
    f=Pesel[5] - '0';
    g=Pesel[6] - '0';
    h=Pesel[7] - '0';
    i=Pesel[8] - '0';
    j=Pesel[9] - '0';
    k=Pesel[10] - '0';

    // obliczam
    sum=1*a+3*b+7*c+9*d+1*e+3*f+7*g+9*h+1*i+3*j;
    wynik=10-(sum%10);

    // wyświetlam komunikat
    if(wynik==k) {printf("\n\n PESEL poprawny.\n\n");} else printf("\n\nPESEL bledny!\n\n");

    // czekam
    system("PAUSE");

    return 0;
    }

    Pisząc poniższy kod walidacji php wzorowałem się na znalezionym gotowcu
    Code:

    function validator_peselus($pesel)
    {
    if (strlen($pesel) != 11 || !is_numeric($pesel))
    {
    return'ilość elementów się nie zgadza';
    }

    $a[0] = "0";
    $b[1] = "0";
    $c[2] = "0";
    $d[3] = "0";
    $e[4] = "0";
    $f[5] = "0";
    $g[6] = "0";
    $h[7] = "0";
    $i[8] = "0";
    $j[9] = "0";
    $k[10] = "0";

    $sum=1*a+3*b+7*c+9*d+1*e+3*f+7*g+9*h+1*i+3*j;
      wynik=10-(sum%10);

      if(!wynik==k)
      {
     return 'PESEL błedny!';
     }
     return;
    }

    0 14
  • #2 16 Lip 2011 20:24
    sakuwbarakushow
    Warunkowo odblokowany

    No i ?

    0
  • #3 16 Lip 2011 23:08
    suromarek
    Poziom 10  

    mam problem z tą linijką kodu ponieważ nie umiem zapisać dzielenia modulo w php

    Cytat:

    wynik=10-(sum%10);

    0
  • #4 17 Lip 2011 07:51
    Dżyszla
    Poziom 42  

    Dzielenie modulo ma dokładnie ten sam operator. A gdzie Ci się z kodu PHP podziały $ przed nazwami zmiennych?

    Ponadto w kodzie z C masz szereg zmiennych ustawianych z tablicy o wartościach odpowiadających cyfrom na poszczególnych pozycjach (a więc zmienne typu int), a w PHP masz szereg tablic na dodatek ze znakami... Pokręciłeś. Przecież przepisanie kodu z C do PHP to w zasadzie kopiuj-wklej i małe modyfikacje typu znaki $.

    0
  • #5 17 Lip 2011 08:15
    sakuwbarakushow
    Warunkowo odblokowany

    $a % $b ;)

    0
  • #6 17 Lip 2011 08:31
    suromarek
    Poziom 10  

    Cytat:

    function validator_peselus($pesel)
    {
    if (strlen($pesel) != 11 || !is_numeric($pesel))
    {
    return'ilość elementów się nie zgadza';
    }

    a=$pesel[0] - '0';
    b=$pesel[1] - '0';
    c=$pesel[2] - '0';
    d=$pesel[3] - '0';
    e=$pesel[4] - '0';
    f=$pesel[5] - '0';
    g=$pesel[6] - '0';
    h=$pesel[7] - '0';
    i=$pesel[8] - '0';
    j=$pesel[9] - '0';
    k=$pesel[10] - '0';

    $sum=1*$a+3*$b+7*$c+9*$d+1*$e+3*$f+7*$g+9*$h+1*$i+3*$j;
    $wynik=10-($sum%10);

    if(!$wynik==$k)
    {
    return 'PESEL błedny!';
    }
    return;
    }

    kod już lekko zmodyfikowałem tylko problem jest jeszcze z poniższym fragmentem
    Cytat:

    a=$pesel[0] - '0';
    b=$pesel[1] - '0';
    c=$pesel[2] - '0';
    d=$pesel[3] - '0';
    e=$pesel[4] - '0';
    f=$pesel[5] - '0';
    g=$pesel[6] - '0';
    h=$pesel[7] - '0';
    i=$pesel[8] - '0';
    j=$pesel[9] - '0';
    k=$pesel[10] - '0';

    0
  • #7 17 Lip 2011 08:44
    sakuwbarakushow
    Warunkowo odblokowany

    dlaczego zrobiłeś tablice od a-k ?
    daj tak zadeklaruj tablicę $tablica = array(a,b,itd);

    $tablica=$a[0]='1';
    dlaczego dałeś minus ? dlaczego odejmujesz 0 od pierwszego elementu tablicy ?

    0
  • #8 17 Lip 2011 10:20
    suromarek
    Poziom 10  

    teraz wywala błąd o nie zgodności typów $sum i $wynik

    Cytat:

    function validator_peselus($pesel)
    {
    if (strlen($pesel) != 11 || !is_numeric($pesel))
    {
    return'ilość elementów się nie zgadza';
    }
    $pesel = array(a,b,c,d,e,f,g,h,i,j,k);


    $pesel=$a[0] = '0';
    $pesel=$b[1] = '0';
    $pesel=$c[2] = '0';
    $pesel=$d[3] = '0';
    $pesel=$e[4] = '0';
    $pesel=$f[5] = '0';
    $pesel=$g[6] = '0';
    $pesel=$h[7] = '0';
    $pesel=$i[8] = '0';
    $pesel=$j[9] = '0';
    $pesel=$k[10] = '0';

    $sum=1*$a+3*$b+7*$c+9*$d+1*$e+3*$f+7*$g+9*$h+1*$i+3*$j;
    $wynik=10-($sum%10);

    if(!$wynik==$k)
    {
    return 'PESEL błedny!';
    }
    return;
    }

    0
  • #9 17 Lip 2011 10:37
    Dżyszla
    Poziom 42  

    Oj, kolego, coś podstaw brakuje, widzę i chyba nie wiesz, co się dzieje w tym kodzie...

    Jeśli chcesz otrzymać poszczególne cyfry, to najlepiej zrobić to w PHP tak:

    Kod: php
    Zaloguj się, aby zobaczyć kod

    W PHP nie ma potrzeby stosowania funkcji obliczających cyfrę, bo w zasadzie trudno mówić o istnieniu typu znakowego. W C z kolei typ znakowy to po prostu liczba, stąd odjęcie od '0' znaku '0' daje cyfrę 0. W PHP wystarczy zrzutować, choć i to nie jest wcale konieczne, jeśli później zastosujesz do obliczeń.

    Gdyby chcieć dokładnie odwzorować kod z C, to wyglądałoby to mniej więcej tak:
    Kod: php
    Zaloguj się, aby zobaczyć kod

    0
  • #10 17 Lip 2011 11:36
    suromarek
    Poziom 10  

    teraz przy wpisaniu do pola formularza 11 cyfry wyskakuję komunikat ' ilość elementów się nie zgadza'

    Cytat:

    function validator_peselus($pesel)
    {
    if (strlen($pesel) != 11 || !is_numeric($pesel))
    {
    return'ilość elementów się nie zgadza';
    }
    $pesel = array(a,b,c,d,e,f,g,h,i,j,k);


    $a=(int)$pesel[0];
    $b=(int)$pesel[1];
    $c=(int)$pesel[2];
    $d=(int)$pesel[3];
    $e=(int)$pesel[4];
    $f=(int)$pesel[5];
    $g=(int)$pesel[6];
    $h=(int)$pesel[7];
    $i=(int)$pesel[8];
    $j=(int)$pesel[9];
    $k=(int)$pesel[10];


    $a=ord($pesel[0])-ord('0');
    $b=ord($pesel[1])-ord('0');
    $c=ord($pesel[2])-ord('0');
    $d=ord($pesel[3])-ord('0');
    $e=ord($pesel[4])-ord('0');
    $f=ord($pesel[5])-ord('0');
    $g=ord($pesel[6])-ord('0');
    $h=ord($pesel[7])-ord('0');
    $i=ord($pesel[8])-ord('0');
    $j=ord($pesel[9])-ord('0');
    $k=ord($pesel[10])-ord('0');


    $sum=1*$a+3*$b+7*$c+9*$d+1*$e+3*$f+7*$g+9*$h+1*$i+3*$j;
    $wynik=10-($sum%10);

    if(!$wynik==$k)
    {
    return 'PESEL błedny!';
    }
    return;
    }

    0
  • #12 17 Lip 2011 11:55
    sakuwbarakushow
    Warunkowo odblokowany

    != 11 różne lub równe 11. Daj tutaj 12 i będzie dobrze

    0
  • #14 17 Lip 2011 16:00
    suromarek
    Poziom 10  

    znowu problem z ilością elementów które się nie zgadzają

    Cytat:

    function validator_peselus($pesel)
    {
    if (strlen($pesel)<>'11' || !is_numeric($pesel))
    {
    return'ilość elementów się nie zgadza';
    }
    $pesel = array(a,b,c,d,e,f,g,h,i,j,k);


    $a=(int)$pesel[0];
    $b=(int)$pesel[1];
    $c=(int)$pesel[2];
    $d=(int)$pesel[3];
    $e=(int)$pesel[4];
    $f=(int)$pesel[5];
    $g=(int)$pesel[6];
    $h=(int)$pesel[7];
    $i=(int)$pesel[8];
    $j=(int)$pesel[9];
    $k=(int)$pesel[10];


    $a=ord($pesel[0])-ord('0');
    $b=ord($pesel[1])-ord('0');
    $c=ord($pesel[2])-ord('0');
    $d=ord($pesel[3])-ord('0');
    $e=ord($pesel[4])-ord('0');
    $f=ord($pesel[5])-ord('0');
    $g=ord($pesel[6])-ord('0');
    $h=ord($pesel[7])-ord('0');
    $i=ord($pesel[8])-ord('0');
    $j=ord($pesel[9])-ord('0');
    $k=ord($pesel[10])-ord('0');


    $sum=1*$a+3*$b+7*$c+9*$d+1*$e+3*$f+7*$g+9*$h+1*$i+3*$j;
    $wynik=10-($sum%10);

    if(!$wynik==$k)
    {
    return 'PESEL błedny!';
    }
    return;
    }

    Cytat:

    wywołanie funkcji
    require('pesel.php');
    validator_peselus($pesel);


    Dodano po 2 [godziny] 22 [minuty]:

    Znalazłem pesel php z wilkipedii który działa tylko chciałbym się zapytać co robi ta linijka kodu
    Cytat:

    ?0:$int;

    Cytat:

    <?
    function CheckPESEL($str)
    {
    if (!preg_match('/^[0-9]{11}$/',$str)) //sprawdzamy czy ciąg ma 11 cyfr
    {
    return false;
    }

    $arrSteps = array(1, 3, 7, 9, 1, 3, 7, 9, 1, 3); // tablica z odpowiednimi wagami
    $intSum = 0;
    for ($i = 0; $i < 10; $i++)
    {
    $intSum += $arrSteps[$i] * $str[$i]; //mnożymy każdy ze znaków przez wagć i sumujemy wszystko
    }
    $int = 10 - $intSum % 10; //obliczamy sumć kontrolną
    $intControlNr = ($int == 10)?0:$int;
    if ($intControlNr == $str[10]) //sprawdzamy czy taka sama suma kontrolna jest w ciągu
    {
    return true;
    }
    return false;
    } ?>
    [/quote]

    0