Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [JavaScript][PHP]Generator numeru pesel JS-> PHP
Elber
post
Post #1





Grupa: Zarejestrowani
Postów: 381
Pomógł: 12
Dołączył: 9.07.2007

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


Witam,

szukałem wczoraj dość długo generatora numerów pesel w PHP ... zamiast tego znalazłem w JS ... Tylko nie za bardzo wiem jak przerobić to na PHP.

Wygenerowane liczby chcę zakodować w mcrypt i przesłać do innego skryptu, rozkodować i sprawdzić czy wygenerowane liczby są prawidłowe (IMG:style_emoticons/default/smile.gif) Algorytm numeru PESEL idealnie się do tego nadaje, jednak nie wiem jak wygenerować PESEL w PHP. Podaję kod w JS który znalazłem:

Kod
function getDigit()
{
    return Math.floor(Math.random() * 10);
}
function calcPesel(date, sex)
{
    var wagi = new Array (1, 3, 7, 9, 1, 3, 7, 9, 1, 3);

    var fullYear = date.getFullYear();
    var y=fullYear % 100;
    var m=date.getMonth()+1;
    var d=date.getDate();
    
    if (fullYear>=1800 && fullYear<=1899){
        m += 80;
    } else
    if (fullYear>=2000 && fullYear<=2099){
        m += 20;
    } else
    if (fullYear>=2100 && fullYear<=2199){
        m += 40;
    } else
    if (fullYear>=2200 && fullYear<=2299){
        m += 60;
    }
    
    var cyfry = new Array (Math.floor(y/10),y%10,Math.floor(m/10),m%10,Math.floor(d/10),d%10);
    for (var i = cyfry.length; i < wagi.length-1; i++)
        cyfry[i] = getDigit();
    if (sex == 'M'){
        cyfry[wagi.length-1] = getLetter('13579');
    } else if (sex == 'F'){
        cyfry[wagi.length-1] = getLetter('02468');
    } else {
        cyfry[wagi.length-1] = getDigit();
    }
        
    var cyfra_kontrolna = 0;
    for (var i=0; i<cyfry.length; i++)
        cyfra_kontrolna += wagi[i] * cyfry[i];
    cyfra_kontrolna = (10 - (cyfra_kontrolna % 10)) % 10;
                
    var r = '';
    for (var i=0; i<cyfry.length; i++)
        r += String(cyfry[i]);
    r += String(cyfra_kontrolna);    
    return r;
}
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mls
post
Post #2





Grupa: Zarejestrowani
Postów: 677
Pomógł: 89
Dołączył: 31.08.2003
Skąd: Warszawa

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


Funkcja z pierwszego posta przepisana prawie 1 do 1 w PHP. Działa, aczkolwiek możnaby to napisać dużo ładniej i dużo prościej.

  1. function getDigit ()
  2. {
  3. return rand(0, 9);
  4. }
  5.  
  6. function getLetter ($letters)
  7. {
  8. return $letters[rand(0, strlen($letters) - 1)];
  9. }
  10.  
  11. function calcPesel ($date = false, $sex = false)
  12. {
  13. $wagi = array(1, 3, 7, 9, 1, 3, 7, 9, 1, 3);
  14. $date = $date === false ? time() : (!is_numeric($date) && strlen($date) == 10 ? strtotime($date) : (int)$date);
  15.  
  16. $fullYear = (int)date('Y', $date);
  17. $y = $fullYear % 100;
  18. $m = (int)date('m', $date);
  19. $d = (int)date('d', $date);
  20.  
  21. if ($fullYear >= 1800 && $fullYear <= 1899)
  22. $m += 80;
  23. elseif ($fullYear >= 2000 && $fullYear <= 2099)
  24. $m += 20;
  25. elseif ($fullYear >= 2100 && $fullYear <= 2199)
  26. $m += 40;
  27. elseif ($fullYear >= 2200 && $fullYear <= 2299)
  28. $m += 60;
  29.  
  30. $cyfry = array(floor($y / 10), $y % 10, floor($m / 10), $m % 10, floor($d / 10), $d % 10);
  31.  
  32. for ($i = count($cyfry); $i < count($wagi) - 1; $i ++)
  33. $cyfry[$i] = getDigit();
  34.  
  35. if (strtoupper($sex) == 'M')
  36. $cyfry[count($wagi) - 1] = getLetter('13579');
  37. elseif (strtoupper($sex) == 'F')
  38. $cyfry[count($wagi) - 1] = getLetter('02468');
  39. else
  40. $cyfry[count($wagi) - 1] = getDigit();
  41.  
  42. $cyfra_kontrolna = 0;
  43. for ($i = 0; $i < count($cyfry); $i ++)
  44. $cyfra_kontrolna += $wagi[$i] * $cyfry[$i];
  45. $cyfra_kontrolna = (10 - ($cyfra_kontrolna % 10)) % 10;
  46.  
  47. $r = '';
  48. for ($i = 0; $i < count($cyfry); $i ++)
  49. $r .= $cyfry[$i];
  50. $r .= $cyfra_kontrolna;
  51. return $r;
  52. }


Ten post edytował mls 9.11.2011, 22:36:23
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 16.10.2025 - 21:11