PESEL oraz informacje, które możemy dzięki niemu zdobyć

Tworząc aplikację, która będzie przechowywała informacje na temat klientów chciałem jak najbardziej uprościć operację dodawania nowego. W ten czas w mej głowie zaświeciła się żaróweczka mówiąca o tym, że nie trzeba wprowadzać oddzielnie daty urodzin, zaznaczać płci oraz dodatkowo wpisywać PESELu. Wszak wystarczy on sam. Od idei do realizacji pozostał już tylko jeden krok – powstała funkcja, która ma za zadanie na podstawie wprowadzonego PESELu podać nam informacje których żądamy. Kodu objaśniać nie trzeba ;)

  1. <?php
  2. /*
  3.         Wyciąganie informacji na podstawie PESELu
  4. **********************************************/
  5. function pesel($pesel, $act = 'valid', $format = 'd.m.Y'){
  6.         /*
  7.                 Narzuć typ
  8.                 jeśli liczba cyfr jest różna
  9.                 od zera to błąd
  10.         *********************************/
  11.         $pesel = preg_replace("/[^0-9]/","",$pesel);
  12.         if( strlen($pesel)!=11 ) return false;
  13.  
  14.         if( $act == 'sex'){
  15.                 /*
  16.                         Rozpoznawanie płci
  17.                 **************************/
  18.                 if ( (int)$_POST['pesel']{9}%2 == 1 ) $sex = 'm'; else $sex = 'f';
  19.                 return $sex;
  20.         }
  21.                 $wagi = array(1,3,7,9,1,3,7,9,1,3);
  22.                 $mc = substr($pesel,2,2);
  23.                 $year = substr($pesel,0,2);
  24.                 $day = substr($pesel,4,2);
  25.                 if( $mc>=1 AND $mc<=12 ) $year = 1900 + $year;
  26.                 elseif( ($mc-20)>=1 AND ($mc-20)<=12 ) { $mc = ($mc-20); $year = 2000 + $year; }
  27.                 elseif( ($mc-40)>=1 AND ($mc-40)<=12 ) { $mc = ($mc-40); $year = 2100 + $year; }
  28.                 elseif( ($mc-60)>=1 AND ($mc-60)<=12 ) { $mc = ($mc-60); $year = 2200 + $year; }
  29.                 elseif( ($mc-80)>=1 AND ($mc-80)<=12 ) { $mc = ($mc-80); $year = 1800 + $year; }
  30.                 else return false;
  31.                
  32.         if( $act == 'data'){
  33.                 /*
  34.                         Data urodzin
  35.                 **************************/
  36.                 $day = substr($pesel,4,2);
  37.                 if( $year>=1970 AND $year <=2037){
  38.                         $time = mktime(0,0,0,$mc,$day,$year);
  39.                         return date($format,$time);
  40.                 }
  41.                 else{
  42.                         $data = '';
  43.                         $length = (strlen($format)-1);
  44.                         for($i=0;$i<=$length;$i++){
  45.                                 if($format[$i]=='d')
  46.                                         $data .=  $day;
  47.                                 elseif($format[$i]=='j')
  48.                                 {
  49.                                         if($day < 10){ $data .=  substr($day,-1); }
  50.                                         else $data .=  $day;
  51.                                 }
  52.                                 elseif($format[$i]=='m')
  53.                                 {
  54.                                         if($mc < 10){ $data .=  '0'.$mc; }
  55.                                         else $data .=  $mc;
  56.                                 }
  57.                                 elseif($format[$i]=='n')
  58.                                 {
  59.                                         if($mc < 10){ $data .=  substr($mc,-1); }
  60.                                         else $data .=  $mc;
  61.                                 }
  62.                                 elseif($format[$i]=='o' OR $format[$i]=='Y')
  63.                                 {
  64.                                         $data .=  $year;
  65.                                 }
  66.                                 elseif($format[$i]=='y')
  67.                                 {
  68.                                         $data .=  substr($mc,-2);
  69.                                 }
  70.                                 else{
  71.                                         $data .= $format[$i];
  72.                                 }
  73.                         }
  74.                         return $data;
  75.                 }
  76.                
  77.         }else{
  78.                 /*
  79.                         Poprawność PESELu
  80.                 *************************/
  81.                        
  82.                         for ($i=0; $i<10;$i++) $suma += $pesel[$i]*$wagi[$i];
  83.                         $liczba = 10 - $suma%10;
  84.                         if ($liczba==10) $liczba=0;
  85.                         if ($pesel[10]==$liczba) return true; else return false;
  86.         }
  87. }
  88. ?>

Jestem świadom fakktu, że lepiej by to było w formie obiektówki – metoda do wprowadzenia peselu i operowanie później na nim, ale aktualnie brak czasu ;)

PHP, mail i załącznik - mail_attachment();

W internecie dostępne są tylko bardzo rozbudowane klasy do wysyłanie e-maili z załącznikiem a te mniejsze po prostu nie działały... Ja natomiast potrzebowałem skromnej funkcji, klasy która tak owe by wysyłała - oczywiście, ma ona w stosunku do np. PHPMailera braki - m.in. fakt, że wszystkie nagłówki tworzymy dalej sami oraz musimy podać mime pliku - jednakże nie chciałem nadmiernie rozbudowywać funkcji, ja przy jej pomocy i tak wysyłam tylko raporty w PDFach :). Tak na prawdę to jest tylko "rozszerenie" standardowej funkcji umożliwiające prostsze wysłanie maila z załącznikiem. Jednakże na moje potrzeby jest to najodpowiedniejsza funkcja :)

  1. <php //
  2. // przykładowa tablica z plikami
  3. //
  4. $files['0']['path'] = "paczka.zip";
  5. $files['0']['mime'] = "application/zip";
  6. $files['0']['name'] = "nazwa_pliku_dla_odbiory.zip";
  7. /*
  8. bool mail ( string $do, string $temat, string $treść [, string $dodatkowe_nagłówki[, array $pliki]] )
  9. */
  10. function mail_attachment($to,$subject,$message,$headers='',$files=array() ){
  11.  
  12. /*
  13. // Krzysztof Wójcik 'krysk' k.wojcik [at] gmail.com
  14. // GPL License
  15. */
  16. $uid = md5(uniqid(time()));
  17. $mime_boundary = '==Multipart_Boundary_x'. $uid .'x';
  18.  
  19. $headers .= "\n". 'MIME-Version: 1.0'. "\n" .
  20. 'Content-Type: multipart/mixed;'."\n" .
  21. ' boundary="'. $mime_boundary .'"';
  22.  
  23. $message .= 'This is a multi-part message in MIME format.'."\n\n" .
  24. '--'.$mime_boundary."\n" .
  25. 'Content-Type:text/html; charset="iso-8859-2"'."\n" .
  26. 'Content-Transfer-Encoding: 7bit'."\n\n" .
  27. $message . "\n\n";
  28.  
  29.  
  30.  
  31. /*******************************************************/
  32. foreach( $files as $data)
  33. {
  34. $file = fopen($data['path'],'rb');
  35. $read = fread($file,filesize($data['path']));
  36. fclose($file);
  37. $read = chunk_split(base64_encode($read));
  38.  
  39. $message .= '--'. $mime_boundary ."\n" .
  40. 'Content-Type: '. $data['mime'] ."\n" .
  41. "Content-Disposition: attachment;\n" .
  42. ' filename="'. $data['name'] ."\n" .
  43. "Content-Transfer-Encoding: base64\n\n" .
  44. $read . "\n\n" .
  45. '--'. $mime_boundary ."\n";
  46.  
  47. unset($file);
  48. unset($read);
  49. }
  50. /*******************************************************/
  51.  
  52. if( @mail($to, $subject, $message, $headers) ) return true;
  53. }
  54. ?>

Mam nadzieję, że komuś posłuży :)