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ń
|
Wysł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 |
|
 |
|
 |
vash
spammer+
Dołączył: 11 Gru 2005
Posty: 316
Przeczytał: 0 tematów
Ostrzeżeń: 0/5 Skąd: Poznan
|
Wysł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 |
|
 |
mmx3
only god is above me.
Dołączył: 26 Lis 2005
Posty: 315
Przeczytał: 0 tematów
Ostrzeżeń: 0/5 Skąd: Poznań
|
Wysł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&id=".$i."&".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 |
|
 |
|
|
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
|