CD Projekt Rekrutacja

 
Napisz nowy temat   Odpowiedz do tematu    Forum UAM informatyka zaoczna alternative ;-] Strona Główna -> Programmer Zone
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
mmx3
only god is above me.



Dołączył: 26 Lis 2005
Posty: 315
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Poznań

PostWysłany: Śro 18:44, 04 Sty 2006    Temat postu: CD Projekt Rekrutacja

przed świętami szukali programistów php a zadanie było takie:

Aplikacja "Nr kont bankowych"

UWAGA: Proszę dokładnie przeczytać oba dokumenty. Niezastosowanie się do któregokolwiek z wymaganych założeń automatycznie dyskfalifikuje zgłoszenie!!

Technologia wykonania: PHP, lub ASP


Podstawowe założenia:

Zadaniem jest przygotowanie aplikacji generującej numery kont bankowych na podstawie podanych przez użytkownika 12 cyfrowych numerów klienta, oraz określonych z góry danych banku.

Aplikacja powinna być przygotowana na pomyłki użytkownika i prowadzić go "za rękę" w przypadku jakiegokolwiek błędu.


Opis interfejsu:

Interfejs użytkownika powinien być podzielony na dwie części. Pierwsza powinna służyć do wprowadzania kolejnych numerów klienta, druga część powinna natomiast zawierać historię wygenerowanych kont w danej sesji.

Aplikacja nie może posługiwać się żadną bazą danych, ani zapisem do plików zewnętrznych. Wszelkie wymagane dane powinny być zapisane w zmiennych oraz w danych formularzy.

Poglądowy przykład interfejsu użytkownika:
(nie należy sugerować się nim zbyt dosłownie, przygotowanie ergonomicznych rozwiązań będzie dodatkowo punktowane)

Numer klienta:[pole tekstowe][przycisk] 1. Nr klienta: xxxxxxxxxxxxNr konta: xxxxxxxxxxxxxxxxxxxxxxxx2. Nr klienta: xxxxxxxxxxxxNr konta: xxxxxxxxxxxxxxxxxxxxxxxx3. Nr klienta: xxxxxxxxxxxxNr konta: xxxxxxxxxxxxxxxxxxxxxxxx


Metody generowania numerów kont bankowych:

W drugim dokumencie (iban.doc) opisane są metody generowania numerów kont bankowych oraz liczb kontrolnych wg standardu IBAN.

Dane banku są stałe, natomiast użytkownik wprowadza tylko 12 cyfrowy numer klienta, czyli tzw. Rozszerzenie Numeru Rachunku (RNR).

Dodatkowo obliczając liczbę kontrolną IBAN nie można posługiwać się wbudowaną funkcją dzielenie modulo, należy opracować własny algorytm. (Zakładamy, że aplikacja nie potrafi obsługiwać liczb większych niż 16 bitów.)


Założenia dodatkowe:

Dodatkowo punktowane będzie wprowadzenie możliwości edycji listy wygenerowanych już numerów kont (zmiana RNR), możliwość zmiany kolejności wyświetlania wyników oraz usuwania pojedynczych rekordów z listy.

Do zadań autora należy przygotowanie łatwego w obsłudze i wygodnego dla użytkownika interfejsu do wykonywania tych zadań.

wg tego:

Przykład obliczania sumy kontrolnej dla standardu NRB lub IBAN wg normy PN-ISO 13616



§ 1. Dane wejściowe:

Numer Rozliczeniowy Banku (NRB): 10600034
Identyfikator Rachunku: 7270
Rozszerzenie Numeru Rachunku (RNR): 121212121210

Otrzymany numer rachunku: 10600034 7270 121212121210

§ 2. Algorytm obliczania liczby kontrolnej standardu IBAN

I. Dodanie po prawej stronie do numeru rachunku kodu kraju oraz dwóch zer:

106000347270121212121210 PL 00


II. Zamiana kodu kraju na wartości liczbowe zgodnie z tabelą w standardzie PN-ISO 7064 publikowaną przez "European Committee for Banking Standarts".

A = 10 G = 16 M = 22 S = 28 Y = 34
B = 11 H = 17 N = 23 T = 29 Z = 35
C = 12 I = 18 O = 24 U = 30
D = 13 J = 19 P = 25 V = 31
E = 14 K = 20 Q = 26 W = 32
F = 15 L = 21 R = 27 X =33

10600034 7270 121212121210 25 21 00


III. Obliczenie reszty z dzielenia ciągu przez liczbę 97 (dzielenie modulo 97). Otrzymaną w ten sposób liczbę odejmuje się od 98.

98 (106000347270121212121210252100 mod 97) = 98 - 18 = 80


IV. Dołączenie przed numerem rachunku sumy kontrolnej. Podany niżej ciąg z obliczoną sumą kontrolną stanowi prawidłowy numer rachunku wg standardu NRB lub IBAN.

80 10600034 7270 121212121210

a ja rozwiązałem je tak :


[link widoczny dla zalogowanych]


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
vash
spammer+



Dołączył: 11 Gru 2005
Posty: 316
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Poznan

PostWysłany: Pon 22:49, 09 Sty 2006    Temat postu:

Wybitnie przedstawiles na tak jakby exe

ja bym jednak kod wolal...


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
mmx3
only god is above me.



Dołączył: 26 Lis 2005
Posty: 315
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Poznań

PostWysłany: Nie 12:13, 15 Sty 2006    Temat postu:

Kod:
<?php
session_start();
$GLOBALS['nrb']=10600034;
$GLOBALS['kraj']="PL";
function error($error)
{
        if(isset($error)and($error!=''))
        {
           $result.="<b>Błąd!</b>: ".$error."<br />";
        }else{

        }
        $GLOBALS['errors'].=$result;
        return $result;
}
class wyswietlaj
{

        function form($edit)
        {

        include("formularz.html");
        }

        function headers()
        {
        echo("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\">
              <html>
              <head>
              <meta http-equiv=\"Content-type\" content=\"text/html; charset=iso-8859-2\" />
              <meta http-equiv=\"Creation-date\" content=\"2005-12-14T23:55:00Z\" />
              <meta http-equiv=\"Content-Language\" content=\"pl\" />
              <meta name=\"Author\" content=\"mmx3.pl\" />
              <title>.generator numerów kont!</title>
              <link rel=\"stylesheet\" href=\"style.css\" type=\"text/css\" /></head>
              <body >
              <h4 style=\"text-align:center\">Generator numerów kont bankowych</h4>
              <table>
              <tr>");

        }
        function footer()
        {
        include("footer.html");
        }

        function tabela()

        {

        echo("<td><table>");
        for($i=1; $i<$_SESSION['count']; $i++)
                {
                //$j=$i+1;
                if($i%2==0)
                $bg="#D4F0FF";
                else
                $bg="#D4E3FF";
                echo("<tr style=\"background:".$bg."\"><td>".$i.". </td><td><b>Nr klienta:</b> ".$_SESSION['tabkli'][$i][0]."</td><td rowspan=\"2\"><a href=\"index.php?cel=edit&amp;id=".$i."&amp;".session_id()."\"></a></td></tr><tr style=\"background:".$bg."\"><td colspan=\"2\"><b>Nr konta:</b> ".$_SESSION['tabkli'][$i][1]."</td></tr>");
                }
        echo("</table></td>");

        }

        function calosc()
        {
        $wys=new wyswietlaj;
        $wys->headers();
        echo("<td style=\"width:150px;\">".$wys->form('')."</td>");
        echo("<td style=\"width:auto;\">".$wys->tabela()."</td>");
        $wys->footer();
        }

}


class generuj
{

        function modulo97($str){
                unset($ret);
                while($str!="")
                        {
                        if (!isset($ret))
                        {
                                $ret = substr($str, 0, 9);
                                $str = substr($str, 9);
                        }else{
                                $lenght = 9 - strlen($ret);
                                $ret .= substr($str, 0, $lenght);
                                $str = substr($str, $lenght);
                        }
                        $ret = $ret%97;
                }

                return $ret;
        }

        function sprawdz($numer)
           {
           if (strlen($numer)==12)
              {
              if ((is_numeric($numer))and!(is_integer($numer)))
                 {
                 return 1;
                 }else{
                 error("Numer musi być liczbą całkowitą!<br />");
                 return 0;
                 }
              }else{
              error("Za krótki numer! Sprawdź numer i wpisz ponownie.<br />");
              return 0;
              }

           }

        function haszuj($numer)
                {
                        include("kraje.inc");




           for($i=0;$i<=3;$i++)
              {
              $j=$i;
                while(($idrach[$i]<=9)and($j<=strlen($numer)))
                        {
                        //echo($idrach[$i]." ".$numer[$j]."<br />");
                        if($idrach[$i]+$numer[$j]<=9)
                                $idrach[$i]+=$numer[$j];
                        //echo($idrach[$i]."<br />");
                        $j=$j+2;


                        }
              }
           $idrachu=implode("",$idrach);
           //echo($idrachu."<br />");
           //132186478979 <- przy tym sie wieszalo
           /*for($i=0;$i<=3;$i++)
              {
              $j=$i;
                while(($idrach2[$i]<=9)and($j<=strlen($idrachu)))
                        {
                        //echo($idrach2[$i]." ".$idrachu[$j]."<br />");
                        if($idrach2[$i]+$idrachu[$j]<=9)
                                $idrach2[$i]+=$idrachu[$j];
                        //echo($idrach2[$i]."<br />");
                        $j=$j+2;
                        }
              }
           $idrachu2=implode("",$idrach2);
           echo($idrachu2."<br />");

           */
           #kraj
           $kraj=$GLOBALS['kraj'];
           for($i=0;$i<=strlen($kraj);$i++)
           {
           $kraj2[$i]=$kraje[$kraj[$i]];
           }
           $krajcomp=implode("",$kraj2);
           #skladanie
           $dzielna=$GLOBALS['nrb'].$idrachu.$numer.$krajcomp."00";
           //echo($dzielna."<br />");
                #reszta z dzielenia
                $temp = new generuj;
                $dwiepiercyf=98 - $temp->modulo97("$dzielna");
                if($dwiepiercyf<10)
                        {
                        $dwiepiercyf2="0".$dwiepiercyf;
                        }else{
                        $dwiepiercyf2=$dwiepiercyf;
                        }
                #sladanie ponowne
                $zhaszowany=$dwiepiercyf2." ".$GLOBALS['nrb']." ".$idrachu." ".$numer;
                //echo($zhaszowany."<br />");
           return $zhaszowany;
           }

        function zapis($numer,$hashed)
                {
                 $_SESSION['tabkli'][] = array($numer, $hashed);
                 $_SESSION['count']++;
                 //echo($_SESSION['tabkli[][0]']."<br />");
                 //echo($_SESSION['tabkli[][1]']."<br />");
                #                }else{
                 #$_SESSION['tabkli[0][1]']=$numer;
                 #$_SESSION['tabkli[0][1]']=$hashed;
                 //echo("<pre>");
                 //print_r($_SESSION);
                 //echo("</pre>");

                 //}
                 //header("Location: index.php?".session_id());
           }
}
if (isset($_POST['ins']))
        {
        $nume= new generuj;
        $wyswietlaj=new wyswietlaj;
        if($nume->sprawdz($_POST['num'])==1)
                {
                $nume->zapis($_POST['num'], $nume->haszuj($_POST['num']));
                }else{

                }

        }else{

        }
        $wyswietlaj=new wyswietlaj;
        $wyswietlaj->calosc();


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum UAM informatyka zaoczna alternative ;-] Strona Główna -> Programmer Zone Wszystkie czasy w strefie EET (Europa)
Strona 1 z 1

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach


Bluetab template design by FF8Jake of FFD
fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2002 phpBB Group
Regulamin