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
Elber
post
Post #2





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

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


Już tak próbowałem, ale jak odpalę to to cały czas myśli ... nic się nie wyświetla tylko cały czas się coś robi ...

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


Teraz wpadłem na pomysł że można trochę to obejść ... ale nie jest to zbyt optymalne rozwiązanie ...

  1.  
  2. function getDigit()
  3. {
  4. return floor(rand() * 10);
  5. }
  6.  
  7. function pesel($pesel)
  8. {
  9. $pesel = preg_replace('/([^0-9]*)/', '', $pesel);
  10. if ( strlen($pesel) != 11)
  11. {
  12. return 0; //zła długość
  13. }
  14. $suma='';
  15. $wagi = array(1,3,7,9,1,3,7,9,1,3); //sprawdzanie sumy kontrolnej
  16. for ($i=0; $i<10; $i++)
  17. {
  18. $suma += $pesel[$i]*$wagi[$i];
  19. }
  20. $liczba = 10 - $suma%10;
  21. if ( $liczba == 10 )
  22. {
  23. $liczba=0;
  24. }
  25. if ( $pesel[10] == $liczba )
  26. {
  27. return 1;
  28. }
  29. else
  30. {
  31. return 0;
  32. }
  33. }
  34.  
  35. $j=0;
  36. for($i=0; $j<=0; $i++){
  37. $pes=getDigit();
  38. if(pesel($pes)=='1'){
  39. $j++;
  40. echo $i.' - '.$pes.'<br />';
  41. }
  42. }
  43.  


Taki kod wyświetli mi poprawny kod pesel, jednak chyba lepszym i szybszym rozwiązaniem byłoby naprawić ten kod wyżej (IMG:style_emoticons/default/smile.gif) Ma ktoś jakiś pomysł jak to zrobić ?
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: 6.10.2025 - 14:09