Konto_check

Bibliothek zum Test deutscher Bankkonten

Überblick Testseite Download BLZ-Daten Beispiele Programme Impressum
Konto_check TestseiteQuellcode

Bibliothek zum Test deutscher Bankkonten

Quellcode dieses Skriptes

<?
### dies ist eine aus konto_test.lx generierte Datei - nicht editieren!!!
header("Content-Type: text/html;charset=iso-8859-1");

/* Dies ist ein kleines Testskript, um das PHP-API der konto_check
 * Bibliothek zu zeigen.
 * geschrieben März 2008, M. Plugge
 * kleine Änderungen Januar 2009 M.P.
 * Umstellung auf das neue API Februar 2009 M.P.
 * Suchfunktionen und Beschreibung der Prüfziffermethoden hinzugefügt 2009
 * neues Layout (CSS) November 2009
 * Teilweiser Umzug nach kontocheck.sourceforge.net Juni 2012 (bis auf die Prüfseite)
 */

$cookie_expire=time()+60*60*24*365/* cookie für ein Jahr setzen :-) */
if(!empty($_REQUEST['set_default']))
   
setcookie("konto_check_default",$_REQUEST['set_default'],$cookie_expire);

   
/* Hauptmenü */
$head_txt=array(1=>"Überblick","Testseite","Download",
      
"BLZ-Daten","Beispiele","Programme");
if(
file_exists("impressum_include.php"))$head_txt[count($head_txt)+1]="Impressum";
$extra_par="";

   
/* Untermenüs */
$sub_menues=array(
      
1=>array(1=>"Einführung","Aktuelles","Funktionen","Ports","Ruby-Doc","Java-Doc",
         
"Benchmarks","konto_check-at"),
      
2=>array(1=>"Einführung","Einzeltest","Listentest","IBAN-Liste","Suche","Erw. Suche",
         
"mini.php","Versionsinfo","LUT-Info 1","LUT-Info 2","LUT-Info 3","Quellcode"),
      
3=>array(1=>"Downloadseiten"),
      
4=>array(1=>"Einführung","LUT 1.0 / 1.1","LUT 2.0","Kompression","Aktualisierung"),
      
5=>array(1=>"Übersicht","Beispiele in awk","Beispiel in C","Beispiel in C#","Beispiel in Perl",
         
"Beispiel in PHP","Beispiel in Ruby","Beispiel in VB","Testdaten"),
      
6=>array(1=>"Übersicht","konto_check","konto_check_mini","mini.awk","mini.{c|cs|pl|rb|vb}",
         
"mini.php","Perl-Tests"),
      
7=>array(1=>"Impressum")
);
$submenue=$sub_menues[2];  /* Untermenü ist das der Testseite (2) */
foreach($submenue as $i=>$v)$titel_a[$i]="konto_check Testseite - $v"/* Seitentitel */
$search=array('&','"',"'",'<','>');
$replace=array('&amp;','&quot;','&#039;','&lt;','&gt;');

   
/* get_var(): Request-Variable holen, dabei Sonderzeichen maskieren */
function get_var($extra,$var)
{
   global $
$var,$extra_par,$search,$replace;

   if(
array_key_exists($var,$_REQUEST)){
      $
$var=trim(str_replace($search,$replace,$_REQUEST[$var]));
      if(
$extra && !empty($_REQUEST[$var]) && $var!="liste")
         
$extra_par.="&$var=".urlencode($_REQUEST[$var]);
   }
   else
      $
$var="";
}

   
/* get_var_num(): Integer-Request-Variable holen */
function get_var_num($extra,$var)
{
   global $
$var,$extra_par;

   if(isset(
$_REQUEST[$var])){
      $
$var=intval($_REQUEST[$var]);
      if(
$extra && !empty($_REQUEST[$var]))
         
$extra_par.="&$var=".urlencode($_REQUEST[$var]);
   }
   else
      $
$var=0;
}

   
/* get_var_num1(): Integer-Request-Variable holen; falls nicht spezifiziert, -1 */
function get_var_num1($var)
{
   
$var1="{$var}_h";
   global $
$var,$$var1;

   if(isset(
$_REQUEST[$var]) && strlen($_REQUEST[$var]))
      $
$var=$$var1=intval($_REQUEST[$var]);
   else{
         
/* -1 kann nicht vorkommen; als Merker zurückgeben */
      
$$var=-1;
      $
$var1="";
   }
}

   
/* get_var1(): Request-Variable holen für Query-String */
function get_var1($var)
{

   if(isset(
$_REQUEST[$var]))
      return 
$_REQUEST[$var];
   else
      return 
"";
}

   
/* get_var_bool(): boolsche Request-Variable holen */
function get_var_bool($extra,$var)
{
   
$vc="${var}_chk";
   global $
$var,$$vc,$extra_par;

   if(isset(
$_REQUEST[$var])){
      $
$var=1;
      $
$vc=" checked";
      if(
$extra && !empty($_REQUEST[$var]))
         
$extra_par.="&$var=".urlencode($_REQUEST[$var]);
   }
   else
      $
$var=0;
}

   
/* nav_link(): Linkeintrag für die linke Navigationsleiste (Untermenü) */
function nav_link($i,$j,$name)
{
   global 
$sub,$fix_nav;

   if(
$sub==$j)
      echo <<<HTML
   <tr><td class="chk">$name</td></tr>

HTML;
   else
      echo <<<HTML
   <tr><td class="nchk"><a href="?fix_nav=$fix_nav&ausgabe=$i&sub=$j">$name</a></td></tr>

HTML;
}

   
/* head_link(): Linkeintrag für die obere Navigationsleiste (Hauptmenü) */
function head_link($i,$file,$name)
{
   global 
$ausgabe,$fix_nav,$extra_par,$sub_menues;

   
$sm=$sub_menues[$i];
   
$tip="";
   foreach(
$sm as $idx=>$v){$tip.=$v; if($idx<count($sm))$tip.="<br>";}
   if(!
$i)
      echo <<<HTML
   <td class="nchk"><a href="$file">$name</a></td>

HTML;
   else if(
$ausgabe==$i)
      echo <<<HTML
   <td class="chk" onmouseover="Tip('$tip',PADDING,7,FONTSIZE,'1.7ex')" onmouseout="UnTip()">$name</td>

HTML;
   else
      echo <<<HTML
   <td class="nchk"><a href="$file?ausgabe=$i&sub=1&fix_nav=$fix_nav$extra_par" onmouseover="Tip('$tip',PADDING,7,FONTSIZE,'1.7ex')" onmouseout="UnTip()"  >$name</a></td>

HTML;
}

   
/* idate2str(): Integer-Datum (aus lut_valid_date()) in einen String umwandeln
    */
function idate2str($date)
{
   
$day=$date 100;
   
$date/=100;
   
$month=$date 100;
   
$year=$date/100;
   return 
sprintf("%d.%d.%d",$day,$month,$year);
}

   
/* blz_link(): Link für die Detailinfos zu Bankleitzahlen zusammenstellen;
    * dabei sollen die Übergabevariablen erhalten bleiben.
    */
function blz_link($blz)
{
   global 
$detail,$hauptstellen,$extra_par,$ausgabe,$sub,$fix_nav;

   if(
$detail){
      
$target="";
      
$d="&detail=${_REQUEST['detail']}";
   }
   else{
      
$target=" target=\"_blank\"";
      
$d="";
   }
   if(
$hauptstellen)
      
$hs="&hauptstellen=1";
   else
      
$hs="";

   return 
"<a href=\"?suchen8=1&blz3=$blz&ausgabe=$ausgabe&sub=$sub&fix_nav=$fix_nav"
      
."&ausgabe=".get_var1('ausgabe')
      .
"&blz1=".get_var1('blz1')
      .
"&blz2=".get_var1('blz2')
      .
"&name=".get_var1('name')
      .
"&name_kurz=".get_var1('name_kurz')
      .
"&plz1=".get_var1('plz1')
      .
"&plz2=".get_var1('plz2')
      .
"&ort=".get_var1('ort')
      .
"&pz1=".get_var1('pz1')
      .
"&pz2=".get_var1('pz2')
      .
"&bic1=".get_var1('bic1')
      .
"&pz1=".get_var1('pz1')
      .
"&pz2=".get_var1('pz2')
      .
"$hs$d\" title=\"Detailinfos zur BLZ $blz\"$target>$blz</a>";
}

   
/* Skriptvariablen holen */
get_var(1,"methode");
get_var(1,"kto1");
get_var(1,"blz");
get_var(1,"kto");
get_var(1,"iban");
get_var(1,"zweck");
get_var(1,"blz1");
get_var(1,"blz2");
get_var(1,"blz3");
get_var(1,"bic1");
get_var(1,"pz1");
get_var(1,"pz2");
get_var(1,"plz1");
get_var(1,"plz2");
get_var(1,"regel1");
get_var(1,"regel2");
get_var(1,"name");
get_var(1,"name_kurz");
get_var(1,"ort");
get_var_num(0,"sort_uniq");
get_var_num(0,"zeige_blz");
get_var_num(0,"set_init");
get_var_num(0,"sub");
get_var_num(0,"ausgabe");
if(!isset(
$_REQUEST['fix_nav']))
   
$fix_nav=1;
else
   
$fix_nav=$_REQUEST['fix_nav'];
#get_var_num(0,"fix_nav");
get_var_num(0,"konto_check_default");
if((!
$ausgabe || !$sub) && $konto_check_default){
   
$fix_nav=$konto_check_default/10000;
   
$konto_check_default%=10000;
   
$ausgabe=intval($konto_check_default/100);
   
$sub=$konto_check_default%100;
   if(
$ausgabe!=2)header("Location: http://kontocheck.sourceforge.net/konto_check.php");
}

if(empty(
$ausgabe))$ausgabe=2;
if(empty(
$sub))$sub=1;
if(
$fix_nav)$fix=""; else $fix="_fix";
get_var(1,"liste");
get_var(1,"tabelle");
get_var_bool(1,"iban_test");
get_var_bool(1,"iban2bic");
get_var_bool(1,"methode_test");
get_var_bool(1,"kto_test");
get_var_bool(1,"kto_test_r");
get_var_bool(1,"iban_gen");
get_var_bool(1,"zweck_test");
get_var_bool(1,"zweck_gen");
get_var_bool(1,"suchen1");
get_var_bool(1,"suchen2");
get_var_bool(1,"suchen3");
get_var_bool(1,"suchen4");
get_var_bool(1,"suchen5");
get_var_bool(1,"suchen6");
get_var_bool(1,"suchen7");
get_var_bool(1,"suchen8");
get_var_bool(1,"suchen9");
get_var_bool(1,"methode_txt");
get_var_bool(1,"iban_regel_txt");
get_var_bool(1,"hauptstellen");
get_var_bool(1,"methode_liste");
get_var_bool(1,"detail");
get_var_bool(1,"force_iban");
get_var_bool(1,"force_iban2");
get_var_bool(1,"kc_num");
get_var_bool(1,"kc_txt1");
get_var_bool(1,"kc_txt2");
get_var_bool(1,"uebersicht_rueckgabe");
get_var_bool(1,"papier");
get_var_bool(1,"iban_regel");
get_var_bool(1,"methode_neu");

   
/* Radio-Buttons für Auswahl des LUT-Sets generieren */
switch($set_init){
   case 
0$set_init0_chk=" checked"$set_init1_chk=$set_init2_chk=""; break;
   case 
1$set_init1_chk=" checked"$set_init0_chk=$set_init2_chk=""; break;
   case 
2$set_init2_chk=" checked"$set_init0_chk=$set_init1_chk=""; break;
   default: break;
}
lut_info("/etc/blz.lut",$i1,$v1,$i2,$v2); /* Infos zum Gültigkeitzeitraum der LUT-Blocks holen */
$ix1=explode("\n",$i1);
$ix2=explode("\n",$i2);
$g1=$ix1[0];   /* die Information steht jeweils in der ersten Zeile */
$g2=$ix2[0];
$g1a=explode(' ',$g1);
$g1b=explode('-',$g1a[3]);
$g1=strftime("%d.%m.%Y",strtotime($g1b[0]))." bis ".strftime("%d.%m.%Y",strtotime($g1b[1]));
$g2a=explode(' ',$g2);
$g2b=explode('-',$g2a[3]);
$g2=strftime("%d.%m.%Y",strtotime($g2b[0]))." bis ".strftime("%d.%m.%Y",strtotime($g2b[1]));

$radiobutton_lut_set=<<<HTML
<p>In der <a href="http://kontocheck.sourceforge.net/konto_check.php?ausgabe=4&sub=1" target="_blank">LUT-Datei</a>
sind zwei <a href="?ausgabe=2&sub=10" target="_blank">Datensätze</a> (Bundesbank-Dateien)
enthalten; mit dem folgenden Radiobutton wird festgelegt, wie die Bibliothek
initialisiert werden soll. Die Initialisierung kann entweder abhängig vom
aktuellen Datum (automatisch) oder wahlweise von Block 1 (gültig vom 
$g1) oder
Block 2 (gültig vom 
$g2) der LUT-Datei erfolgen.

<p>Initialisierung: <span title="den aktuell gültigen Datenblock auswählen"><input name="set_init" type="radio" value="0"
$set_init0_chk>automatisch</span>
   <span title="Datenblock gültig vom 
$g1"><input name="set_init" type="radio" value="1"$set_init1_chk>Set 1</span>
   <span title="Datenblock gültig vom 
$g2"><input name="set_init" type="radio" value="2"$set_init2_chk title="$g2">Set 2</span>

HTML;

      
/* der Button muß nur angezeigt werden, solange die Methoden noch nicht gültig sind */
   
if(time()<1575846000){
      
$radiobutton_lut_set.=<<<HTML
<p><input name="methode_neu" type="checkbox"$methode_neu_chk> neue Prüfziffermethoden (gültig ab 09.12.2019) aktivieren

HTML;
   if(
$methode_neu>0)
      
pz_aenderungen_enable(1);
   else
      
pz_aenderungen_enable(0);
}

   
/* alphanumerische Variante der Prüfziffer (A0, A1...) umwandeln nach numerisch */
$pz1a=strtolower($pz1);
$pz2a=strtolower($pz2);
if(
strlen($pz1)==&& ord($pz1a[0])>=ord('a'))
   
$pz1a=100+(ord($pz1a[0])-ord('a'))*10+ord($pz1a[1])-ord('0');
if(
strlen($pz2)==&& ord($pz2a[0])>=ord('a'))
   
$pz2a=100+(ord($pz2a[0])-ord('a'))*10+ord($pz2a[1])-ord('0');

if(empty(
$blz2) || $blz2<$blz1)$blz2a=$blz1; else $blz2a=$blz2;
if(empty(
$pz2) || $pz2a<$pz1a)$pz2a=$pz1a;
if(empty(
$plz2) || $plz2<$plz1)$plz2a=$plz1; else $plz2a=$plz2;
if(empty(
$regel2) || $regel2<$regel1)$regel2=$regel1;

$ausgabe=intval($ausgabe);
if(
$ausgabe<1)
   
$ausgabe=1;
#{ @@@p}
#else if($ausgabe>4)
#   $ausgabe=4;
#{ @@i}
else if($ausgabe>7)
   
$ausgabe=7;

$suchen=$suchenx=0;
if(
$suchen1 && strlen($name))$suchen=1;
if(
$suchen2 && strlen($name_kurz))$suchen=2;
if(
$suchen3 && strlen($ort))$suchen=3;
if(
$suchen4 && strlen($bic1))$suchen=4;
if(
$suchen5 && strlen($plz1))$suchen=5;
if(
$suchen6 && strlen($blz1))$suchen=6;
if(
$suchen7 && strlen($pz1))$suchen=7;
if(
$suchen8 && strlen($blz3))$suchenx=8;
if(
$suchen9 && strlen($regel1))$suchen=9;

$tw=' class="tw"';
echo <<<HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
   <title>
${titel_a[$sub]}</title>
   <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
   <meta name="description" content="Testseite für die PHP-Version von konto_check">
   <meta name="author" content="Michael Plugge">
   <meta name="keywords" content="kontonummer deutsch prüfziffer bank library c-library prüfzifferverfahren">
   <link rel="stylesheet" type="text/css" media="screen" href="formate.css" />
   <link rel="stylesheet" type="text/css" media="print" href="formate_print.css" />
</head>
<body bgcolor="#f6f1b1">
<script type="text/javascript" src="wz_tooltip.js"></script>
<div class="kopf
$fix">
<h1><em>Konto_check</em></h1>
<h2>Bibliothek zum Test deutscher Bankkonten</h2>
<p><table border><tr>

HTML;
   foreach(
$head_txt as $i=>$v)if($i==|| $i==7)
      
head_link($i,"https://www.michael-plugge.de/konto_check/konto_test.php",$v);
   else
      
head_link($i,"http://kontocheck.sourceforge.net/konto_check.php",$v);
echo <<<HTML
</tr></table>
</div>

<div class="nav-links
$fix">
<table border>

HTML;
   
/* nun werden die Navigationspunkte links ausgegeben... */
if($ausgabe!=7)foreach($submenue as $i=>$v)nav_link($ausgabe,$i,$v);

if(
$fix_nav){
   
$fix_nav_chk=" checked";
   
$fix_nav1=0;
}
else{
   
$fix_nav_chk="";
   
$fix_nav1=1;
}
$def0=$fix_nav*10000+$ausgabe*100+$sub;

echo <<<HTML
</table>
<p><table border>
<tr><td>
   <table><tr>
      <td><input type="checkbox" name="fix_nav"
$fix_nav_chk disabled>&nbsp;</td>
      <td><a href="?fix_nav=
$fix_nav1&ausgabe=$ausgabe&sub=$sub$extra_par" title="die Navigation kann feststehen oder beim Scrollen mitbewegt werden">Navigation<br>mitscrollen</a></td>
   </tr></table>
</td></tr>
<tr><td class="nchk">
      <a href="?set_default=
$def0&fix_nav=$fix_nav&ausgabe=$ausgabe&sub=$sub$extra_par" title="Legt diese Seite als Startseite für konto_check fest (falls kein Unterpunkt gewählt wurde)">diese Seite als<br>Eingangsseite<br>setzen</a></td>
   </tr></table>
</td></tr>
</table>
</div>

<div class="kopf_druck">
<table width="100%"><tr><td align="left">
<span class="h1x"><em>Konto_check</em></span>
</td><td align="right">
<span class="tb">
${head_txt[$ausgabe]}</span> &rarr; <span class="tb">${submenue[$sub]}</span>
</td></tr></table>
<h2>Bibliothek zum Test deutscher Bankkonten</h2>
</div>

<div class="text"><div class="text_std">

HTML;
if(
$ausgabe==7){
   include 
"impressum_include_iso.php";
   echo 
"</div></div>\n</body>\n\n</html>";
   exit(
0);
}
switch(
$sub){

   case 
1:

      
#######################################
      ####    Startseite / Einzeltest     ###
      #######################################

      
$ret_scl=lut_scl_info("/etc/blz.lut",$scl_cnt,$scl_datum);
      if(
$ret_scl<0)
         
$scl_info="";
      else
         
$scl_info="<br>Gueltigkeits der SCL-Daten: ab $scl_datum";
      
$version="<em>konto_check</em> Bibliothek Version ".kto_check_version(1)
         .
" vom ".kto_check_version(6)
         .
"<br>Stand der Prüfziffermethoden: ".kto_check_version(4)
         .
"<br>Stand der IBAN-Regeln: ".kto_check_version(5)
         .
$scl_info;
      echo <<<HTML
<h2>Testseite für <em>konto_check</em> (PHP-Version)</h2>
<p>Auf dieser Seite können Sie Kontonummern mit Hilfe der <em>konto_check</em>
library testen. Falls bei einer Prüfziffermethode eine bestimmte Untermethode
getestet werden soll, ist diese als Ziffer oder Buchstabe an die Methode
anzuhängen, z.B. 903 (oder 90c) für Methode 90c.

<p>Den kompletten PHP-Quellcode dieses Skriptes können Sie mit dem Link
"Quellcode" im letzten Unterpunkt (im linken Menü) im Browser ansehen.

<h3>Versionsinfo</h3>
<p>
$version

<p><i>Anmerkung:</i> Die Versionsinfo an dieser Stelle kann von der im Überblick abweichen,
da die Versionsinfo an dieser Stelle direkt aus der PHP-Bibliothek geholt wird,
während sie an der anderen Stelle fest in die PHP-Seite kodiert ist (die Seiten liegen
auf verschiedenen Servern).

<p><a title="konto_check - Download - heise online" href="http://www.heise.de/download/konto-check-1191953.html" target="_blank"><img alt="konto_check - Download - heise online" title="konto_check - Download - heise online" src="logo91953.png" /></a>

HTML;
break;

   case 
2:

      
#######################################
      ####    Startseite / Einzeltest     ###
      #######################################

      
if(array_key_exists('methode_test_x',$_REQUEST))$methode=$kto1="";
      if(
array_key_exists('kto_test_x',$_REQUEST))$blz=$kto="";
      if(
array_key_exists('iban_test_x',$_REQUEST))$iban="";
      if(
array_key_exists('zweck_test_x',$_REQUEST))$zweck="";

      echo <<<HTML
<form method="get">
<h2>Einzeltest von Kontonummern, IBAN-Generierung</h2>
</div><div class="text_src">
<input type="checkbox" name="methode_txt"
$methode_txt_chk> Text der Prüfzifferberechnungsmethoden ausgeben<br>
<input type="checkbox" name="iban_regel_txt"
$iban_regel_txt_chk> Text der IBAN-Regeln ausgeben<br>
<input type="checkbox" name="detail"
$detail_chk> Details zur Bank anzeigen<br>
<input type="checkbox" name="force_iban"
$force_iban_chk> IBAN-Generierung erzwingen
<input type="checkbox" name="force_iban2"
$force_iban2_chk> ohne Test der Bankverbindung
$radiobutton_lut_set
<p><table cellspacing=12 style="white-space:nowrap">
<tr>
   <td>PZ/Kto.:</td><td><input type="text" value="
$methode" name="methode" size="12" maxlength="3">
   <input type="text" value="
$kto1" name="kto1" size="12" maxlength="10"></td>
   <td><input type=submit name="methode_test_x" value="x"> <input type=submit name="methode_test" value="Kontonummer prüfen"></td>
</tr>
<tr>
   <td>BLZ/Kto.:</td>
   <td><input type="text" value="
$blz" name="blz" size="12" maxlength="8">
   <input type="text" value="
$kto" name="kto" size="12" maxlength="10"></td>
   <td><input type=submit name="kto_test_x" value="x">
      <input type=submit name="kto_test" value="Kto. prüfen" title="Konto prüfen (normale Funktion)">
      <input type=submit name="kto_test_r" value="Kto. prüfen (Regel)" title="Konto prüfen (vor dem Test die IBAN-Regeln auf die Bankverbindung anwenden)">
      <input type=submit name="iban_gen" value="IBAN generieren"></td>
</tr>
<tr>
   <td>IBAN: </td>
   <td><input type="text" value="
$iban" name="iban" size="30" maxlength="34"></td>
   <td><input type=submit name="iban_test_x" value="x"><input type=submit name="iban_test" value="IBAN prüfen">
       <input type=submit name="iban2bic" value="Kontodaten aus der IBAN bestimmen"></td>
</tr>
<tr>
   <td>Zweck: </td>
   <td><input type="text" value="
$zweck" name="zweck" size="30" maxlength="30"></td>
   <td><input type=submit name="zweck_test_x" value="x"> <input type=submit name="zweck_test" value="Verwendungszweck prüfen">
   <input type=submit name="zweck_gen" value="Verwendungszweck generieren"></td>
</tr>
</table>
<input type="hidden" name="ausgabe" value="
$ausgabe">
<input type="hidden" name="sub" value="
$sub">
<input type="hidden" name="fix_nav" value="
$fix_nav">
HTML;
      break;

   case 
3:

      
##########################
      ####    Listentest     ###
      ##########################

      
$liste2=explode("\n",$liste);
      
$liste3=array();
      foreach(
$liste2 as $i=>$v){
         
$zeile=trim($v);
         
$p1=strtolower(substr($zeile,0,1));
         
$p2=strtolower(substr($zeile,1,1));
         if((
ord($p1)>=48 && ord($p1)<=57  || ord($p1)>=97 && ord($p1)<=ord('f'))
               && (
$p2==" " || ord($p2)>=48 && ord($p2)<=57))
            
$liste3[]=$zeile;
      }
      
$liste_neu=implode("\n",$liste3);
      if(
$tabelle=="text"){
         
$t1_chk="";
         
$t2_chk=" checked";
      }
      else{
         
$t1_chk=" checked";
         
$t2_chk="";
      }
      echo <<<HTML
<h2>Listentest von Kontonummern</h2>
<form method="post">
<p>Im unten stehenden Feld können Sie bis zu 1000 Bankverbindungen eingeben,
die getestet werden sollen. Jede Zeile sollte zuerst die Bankleitzahl, dann (durch
ein Blank getrennt) die Kontonummer enthalten. Der Rest der Zeile wird ignoriert.
Zeilen, die nicht mit einer Ziffer (bzw. a oder b bei Methode a0...) beginnen, werden
übersprungen. Falls mehr als 1000 Kontonummern eingegeben werden, werden
die überzähligen ignoriert.

$radiobutton_lut_set

<p><table><tr><td>
<textarea name="liste" rows="12" cols="20">
PZ/BLZ Konto

$liste_neu</textarea>
</td><td>
<input type="checkbox" name="methode_liste"
$methode_liste_chk>Benutzte Prüfmethode ausgeben<br>
<p><input type="radio" name="tabelle" value="tabelle"
$t1_chk>Ausgabe als Tabelle (besser lesbar)<br>
<input type="radio" name="tabelle" value="text" 
$t2_chk>Ausgabe als Text (schnellerer Aufbau)
</td></tr></table>

<p><input type="submit" name="q" value="Liste prüfen">
<input type="hidden" name="ausgabe" value="
$ausgabe">
<input type="hidden" name="sub" value="
$sub">
<input type="hidden" name="fix_nav" value="
$fix_nav">
HTML;
      break;

   case 
4:

      
##########################
      ####    IBAN-Liste     ###
      ##########################

      
$liste2=explode("\n",$liste);
      
$liste3=array();
      foreach(
$liste2 as $i=>$v){
         
$zeile=trim($v);
         
$p1=strtolower(substr($zeile,0,1));
         
$p2=strtolower(substr($zeile,1,1));
         if((
ord($p1)>=48 && ord($p1)<=57  || ord($p1)>=97 && ord($p1)<=ord('f'))
               && (
$p2==" " || ord($p2)>=48 && ord($p2)<=57)
               || ((
$p1=="@" || $p1=="+") && ($p2=="@" || $p2=="+" || ord($p2)>=48 && ord($p2)<=57)))
            
$liste3[]=$zeile;
      }
      
$liste_neu=implode("\n",$liste3);
      if(
$tabelle=="text"){
         
$t1_chk="";
         
$t2_chk=" checked";
      }
      else{
         
$t1_chk=" checked";
         
$t2_chk="";
      }
      echo <<<HTML
<h2>IBAN-Liste aus Bankverbindungen erstellen</h2>
<form method="post">
<p>Im unten stehenden Feld können Sie bis zu 1000 Bankverbindungen eingeben,
für die die jeweilige IBAN berechnet werden soll. Jede Zeile sollte zuerst
die Bankleitzahl, dann (durch ein Blank getrennt) die Kontonummer enthalten.
Der Rest der Zeile wird ignoriert.

<p>Falls für eine einzelne Bankverbindung kein Test auf Richtigkeit
durchgeführt werden soll, ist der BLZ ein +&nbsp;voranzustellen; falls für eine BLZ
nicht geprüft werden soll, ob die Bank einer Selbstberechnung zugestimmt hat,
ist der BLZ ein @&nbsp;voranzustellen. Das Ergebnis kann in diesen Fällen allerdings
u.U. fehlerhaft sein.


<p>Zeilen, die nicht mit einer Ziffer (bzw. @ oder +) beginnen, werden
übersprungen. Falls mehr als 1000 Kontonummern eingegeben werden, werden die
überzähligen ignoriert.

$radiobutton_lut_set

<p><table><tr><td>
<textarea name="liste" rows="17" cols="20">
PZ/BLZ Konto

$liste_neu</textarea>
</td><td>
<table>
<tr><td><input type="checkbox" name="papier"
$papier_chk></td><td>Ausgabe als Papierform</td></tr>
<tr><td><input type="checkbox" name="iban_regel"
$iban_regel_chk></td><td>IBAN-Regel ausgeben</td></tr>
<tr><td><input type="checkbox" name="uebersicht_rueckgabe"
$uebersicht_rueckgabe_chk></td><td>Liste der benutzten Rückgabewerte zur Bankverbindung</td></tr>
<tr><td><input type="checkbox" name="kc_num"
$kc_num_chk></td><td>Testergebnis der Bankverbindung numerisch ausgeben</td></tr>
<tr><td><input type="checkbox" name="kc_txt1"
$kc_txt1_chk></td><td>Testergebnis der Bankverbindung als Kurztext ausgeben</td></tr>
<tr><td><input type="checkbox" name="kc_txt2"
$kc_txt2_chk></td><td>Testergebnis der Bankverbindung als Langtext ausgeben</td></tr>
<tr><td><input type="checkbox" name="force_iban"
$force_iban_chk></td><td>IBAN-Berechnung erzwingen</td></tr>
<tr><td><input type="checkbox" name="force_iban2"
$force_iban2_chk></td><td>kein Test der Bankverbindung</td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td><input type="radio" name="tabelle" value="tabelle"
$t1_chk></td><td>Ausgabe als Tabelle (besser lesbar)</td></tr>
<tr><td><input type="radio" name="tabelle" value="text" 
$t2_chk></td><td>Ausgabe als Text (schnellerer Aufbau)</td></tr>
</table>
</td></tr></table>

<p><input type="submit" name="q" value="Liste konvertieren">
<input type="hidden" name="ausgabe" value="
$ausgabe">
<input type="hidden" name="sub" value="
$sub">
<input type="hidden" name="fix_nav" value="
$fix_nav">
HTML;
      break;

   case 
5:

      
##########################################
      ####    Suche nach Banken              ###
      ##########################################

      
switch($sort_uniq){
         case 
0:  $su1_chk=" checked"$su2_chk=$su3_chk=""; break;
         case 
1:  $su2_chk=" checked"$su1_chk=$su3_chk=""; break;
         case 
2:  $su3_chk=" checked"$su1_chk=$su2_chk=""; break;
         default: 
$su1_chk=" checked"$su1_chk=$su2_chk=$su3_chk=""; break;
      }

      echo <<<HTML
<h2>Suche nach Banken</h2>
<p>Auf dieser Seite können Sie Bankleitzahlen, die gewisse Kriterien erfüllen,
suchen. Bei den Feldern, die eine Texteingabe erwarten (Bankname, Ort, BIC)
kann der Text am Anfang abgekürzt werden (z.B. findet a als Ort alle Orte, die
mit a beginnen, aa findet Aachen und Aalen etc.). Bei numerischen Eingaben
(BLZ, PLZ, Prüfziffer) sind zwei Eingabefelder vorhanden, mit denen eine untere
und obere Schranke für den Suchbereich angegeben werden kann.

<p><form method="get">
sort_uniq:
<input type="radio" name="sort_uniq" value="0"
$su1_chk> 0
<input type="radio" name="sort_uniq" value="1"
$su2_chk> 1
<input type="radio" name="sort_uniq" value="2"
$su3_chk> 2
<p>
<input type="checkbox" name="hauptstellen"
$hauptstellen_chk> Nur die Hauptstellen ausgeben<br>
<input type="checkbox" name="detail"
$detail_chk> Detailinfos im gleichen Fenster ausgeben
<table cellspacing=12>
<tr>
   <td>Bankleitzahl:</td>
   <td><input type="text" value="
$blz3" name="blz3" size="8" maxlength="8"></td>
   <td></td>
   <td></td>
   <td><input type="submit" name="suchen8" value="alle Infos zu der Bank ausgeben"></td>
</tr>
<tr>
   <td>Bankleitzahl (Bereich):</td>
   <td><input type="text" value="
$blz1" name="blz1" size="8" maxlength="8"></td>
   <td>bis</td>
   <td><input type="text" value="
$blz2" name="blz2" size="8" maxlength="8"></td>
   <td><input type="submit" name="suchen6" value="Banken suchen"></td>
</tr>
<tr>
   <td>Bankname:</td>
   <td colspan="3"><input type="text" value="
$name" name="name" size="30" maxlength="34"></td>
   <td><input type="submit" name="suchen1" value="Banken suchen"></td>
</tr>
<tr>
   <td>Bankname (Kurzform):</td>
   <td colspan="3"><input type="text" value="
$name_kurz" name="name_kurz" size="30" maxlength="34"></td>
   <td><input type="submit" name="suchen2" value="Banken suchen"></td>
</tr>
<tr>
   <td>Postleitzahl:</td>
   <td><input type="text" value="
$plz1" name="plz1" size="8" maxlength="8"></td>
   <td>bis</td>
   <td><input type="text" value="
$plz2" name="plz2" size="8" maxlength="8"></td>
   <td><input type="submit" name="suchen5" value="Banken suchen"></td>
</tr>
<tr>
   <td>Ort:</td>
   <td colspan="3"><input type="text" value="
$ort" name="ort" size="30" maxlength="34"></td>
   <td><input type="submit" name="suchen3" value="Banken suchen"></td>
</tr>
<tr>
   <td>BIC:</td>
   <td colspan="3"><input type="text" value="
$bic1" name="bic1" size="30" maxlength="30"></td>
   <td><input type="submit" name="suchen4" value="Banken suchen"></td>
</tr>
<tr>
   <td>Prüfziffer:</td>
   <td><input type="text" value="
$pz1" name="pz1" size="3" maxlength="3"></td>
   <td>bis</td>
   <td><input type="text" value="
$pz2" name="pz2" size="3" maxlength="3"></td>
   <td><input type="submit" name="suchen7" value="Banken suchen"></td>
</tr>
<tr>
   <td>IBAN-Regel:</td>
   <td><input type="text" value="
$regel1" name="regel1" size="3" maxlength="3"></td>
   <td>bis</td>
   <td><input type="text" value="
$regel2" name="regel2" size="3" maxlength="3"></td>
   <td><input type="submit" name="suchen9" value="Banken suchen"></td>
</tr>
</table>
<input type="hidden" name="ausgabe" value="
$ausgabe">
<input type="hidden" name="sub" value="
$sub">
<input type="hidden" name="fix_nav" value="
$fix_nav">
HTML;
      break;

   case 
6:

      
##########################################
      ####    Erweiterte Suche nach Banken   ###
      ##########################################

      
$t1=microtime(1);
      
get_var_num(0,'feld_a');
      
$chk_a0=$chk_a1=$chk_a2=$chk_a3=$chk_a4=$chk_a5=$chk_a6=$chk_a7=$chk_a8=$chk_a9="";
      
$chk_a="chk_a$feld_a";
      $
$chk_a=" selected";
      
get_var_num1('int1_a');
      
get_var_num1('int2_a');
      if(
$int2_a==-1)$int2_a=$int1_a;
      
get_var(1,'string_a');

      
get_var_num(0,'feld_b');
      
$chk_b0=$chk_b1=$chk_b2=$chk_b3=$chk_b4=$chk_b5=$chk_b6=$chk_b7=$chk_b8=$chk_b9="";
      
$chk_b="chk_b$feld_b";
      $
$chk_b=" selected";
      
get_var_num1('int1_b');
      
get_var_num1('int2_b');
      if(
$int2_b==-1)$int2_b=$int1_b;
      
get_var(1,'string_b');

      
get_var_num(0,'feld_c');
      
$chk_c0=$chk_c1=$chk_c2=$chk_c3=$chk_c4=$chk_c5=$chk_c6=$chk_c7=$chk_c8=$chk_c9="";
      
$chk_c="chk_c$feld_c";
      $
$chk_c=" selected";
      
get_var_num1('int1_c');
      
get_var_num1('int2_c');
      if(
$int2_c==-1)$int2_c=$int1_c;
      
get_var(1,'string_c');

      
get_var_num(0,'feld_d');
      
$chk_d0=$chk_d1=$chk_d2=$chk_d3=$chk_d4=$chk_d5=$chk_d6=$chk_d7=$chk_d8=$chk_d9="";
      
$chk_d="chk_d$feld_d";
      $
$chk_d=" selected";
      
get_var_num1('int1_d');
      
get_var_num1('int2_d');
      if(
$int2_d==-1)$int2_d=$int1_d;
      
get_var(1,'string_d');

      
get_var_num(0,'feld_e');
      
$chk_e0=$chk_e1=$chk_e2=$chk_e3=$chk_e4=$chk_e5=$chk_e6=$chk_e7=$chk_e8=$chk_e9="";
      
$chk_e="chk_e$feld_e";
      $
$chk_e=" selected";
      
get_var_num1('int1_e');
      
get_var_num1('int2_e');
      if(
$int2_e==-1)$int2_e=$int1_e;
      
get_var(1,'string_e');

      
get_var_num(0,'feld_f');
      
$chk_f0=$chk_f1=$chk_f2=$chk_f3=$chk_f4=$chk_f5=$chk_f6=$chk_f7=$chk_f8=$chk_f9="";
      
$chk_f="chk_f$feld_f";
      $
$chk_f=" selected";
      
get_var_num1('int1_f');
      
get_var_num1('int2_f');
      if(
$int2_f==-1)$int2_f=$int1_f;
      
get_var(1,'string_f');

      
get_var_num(0,'feld_g');
      
$chk_g0=$chk_g1=$chk_g2=$chk_g3=$chk_g4=$chk_g5=$chk_g6=$chk_g7=$chk_g8=$chk_g9="";
      
$chk_g="chk_g$feld_g";
      $
$chk_g=" selected";
      
get_var_num1('int1_g');
      
get_var_num1('int2_g');
      if(
$int2_g==-1)$int2_g=$int1_g;
      
get_var(1,'string_g');

      
get_var_num(0,'feld_h');
      
$chk_h0=$chk_h1=$chk_h2=$chk_h3=$chk_h4=$chk_h5=$chk_h6=$chk_h7=$chk_h8=$chk_h9="";
      
$chk_h="chk_h$feld_h";
      $
$chk_h=" selected";
      
get_var_num1('int1_h');
      
get_var_num1('int2_h');
      if(
$int2_h==-1)$int2_h=$int1_h;
      
get_var(1,'string_h');

      
get_var(1,'verknuepfung');
      
get_var_bool(1,'uniq');
      
get_var_num1('blz_pro_seite');
      
get_var_num1('blz_start');

      if(
$blz_pro_seite!=10 && $blz_pro_seite!=50 && $blz_pro_seite!=100
          
&& $blz_pro_seite!=200 && $blz_pro_seite!=500)$blz_pro_seite=10;
      
$chk_bps_10=$chk_bps_50=$chk_bps_100=$chk_bps_200=$chk_bps_500="";
      
$cb1="chk_bps_$blz_pro_seite";
      $
$cb1=" selected";

      
$t2=microtime(1);
      
kto_check_encoding('i');
      
lut_init("/etc/blz.lut",9,$set_init);
      
$t2a=microtime(1);
      
$suche=lut_suche_init($uniq);
      
$t2b=microtime(1);
      
$default_verknuepfung="";
      
$ret=0;
      if(
$feld_a){
         
$default_verknuepfung.='a';
         if(
$feld_a<&& !empty($string_a))  /* ASCII Suche */
            
$ret=lut_suche_set($suche,'A',$feld_a,$string_a);
         else if(
$int1_a>=0){           /* numerische Suche */
            
if($int2_a<0)$int2_a=0;
            
$ret=lut_suche_set($suche,'A',$feld_a,$int1_a,$int2_a);
         }
         
$rv_a=kto_check_retval2txt_short($ret);
         
$rv_a1=kto_check_retval2html($ret);
      }
      else
         
$rv_a=$rv_a1="";

      if(
$feld_b){
         
$default_verknuepfung.='b';
         if(
$feld_b<&& !empty($string_b))
            
$ret=lut_suche_set($suche,'B',$feld_b,$string_b);
         else if(
$int1_b>=0){
            if(
$int2_b<0)$int2_b=0;
            
$ret=lut_suche_set($suche,'B',$feld_b,$int1_b,$int2_b);
         }
         
$rv_b=kto_check_retval2txt_short($ret);
         
$rv_b1=kto_check_retval2html($ret);
      }
      else
         
$rv_b=$rv_b1="";

      if(
$feld_c){
         
$default_verknuepfung.='c';
         if(
$feld_c<&& !empty($string_c))
            
$ret=lut_suche_set($suche,'C',$feld_c,$string_c);
         else if(
$int1_c>=0){
            if(
$int2_c<0)$int2_c=0;
            
$ret=lut_suche_set($suche,'C',$feld_c,$int1_c,$int2_c);
         }
         
$rv_c=kto_check_retval2txt_short($ret);
         
$rv_c1=kto_check_retval2html($ret);
      }
      else
         
$rv_c=$rv_c1="";

      if(
$feld_d){
         
$default_verknuepfung.='d';
         if(
$feld_d<&& !empty($string_d))
            
$ret=lut_suche_set($suche,'D',$feld_d,$string_d);
         else if(
$int1_d>=0){
            if(
$int2_d<0)$int2_d=0;
            
$ret=lut_suche_set($suche,'D',$feld_d,$int1_d,$int2_d);
         }
         
$rv_d=kto_check_retval2txt_short($ret);
         
$rv_d1=kto_check_retval2html($ret);
      }
      else
         
$rv_d=$rv_d1="";

      if(
$feld_e){
         
$default_verknuepfung.='e';
         if(
$feld_e<&& !empty($string_e))
            
$ret=lut_suche_set($suche,'E',$feld_e,$string_e);
         else if(
$int1_e>=0){
            if(
$int2_e<0)$int2_e=0;
            
$ret=lut_suche_set($suche,'E',$feld_e,$int1_e,$int2_e);
         }
         
$rv_e=kto_check_retval2txt_short($ret);
         
$rv_e1=kto_check_retval2html($ret);
      }
      else
         
$rv_e=$rv_e1="";

      if(
$feld_f){
         
$default_verknuepfung.='f';
         if(
$feld_f<&& !empty($string_f))
            
$ret=lut_suche_set($suche,'F',$feld_f,$string_f);
         else if(
$int1_f>=0){
            if(
$int2_f<0)$int2_f=0;
            
$ret=lut_suche_set($suche,'F',$feld_f,$int1_f,$int2_f);
         }
         
$rv_f=kto_check_retval2txt_short($ret);
         
$rv_f1=kto_check_retval2html($ret);
      }
      else
         
$rv_f=$rv_f1="";

      if(
$feld_g){
         
$default_verknuepfung.='g';
         if(
$feld_g<&& !empty($string_g))
            
$ret=lut_suche_set($suche,'G',$feld_g,$string_g);
         else if(
$int1_g>=0){
            if(
$int2_g<0)$int2_g=0;
            
$ret=lut_suche_set($suche,'G',$feld_g,$int1_g,$int2_g);
         }
         
$rv_g=kto_check_retval2txt_short($ret);
         
$rv_g1=kto_check_retval2html($ret);
      }
      else
         
$rv_g=$rv_g1="";

      if(
$feld_h){
         
$default_verknuepfung.='h';
         if(
$feld_h<&& !empty($string_h))
            
$ret=lut_suche_set($suche,'H',$feld_h,$string_h);
         else if(
$int1_h>=0){
            if(
$int2_h<0)$int2_h=0;
            
$ret=lut_suche_set($suche,'H',$feld_h,$int1_h,$int2_h);
         }
         
$rv_h=kto_check_retval2txt_short($ret);
         
$rv_h1=kto_check_retval2html($ret);
      }
      else
         
$rv_h=$rv_h1="";
      
$t2c=microtime(1);
      
lut_suche($suche,strlen($verknuepfung)?$verknuepfung:$default_verknuepfung,$blz,$zweigstelle);
      
$t3=microtime(1);

      echo <<<HTML
<h2>Erweiterte Suche nach Banken</h2>
<p>Bei der erweiterten Suche können bis zu acht Suchkriterien angegeben und
dann beliebig miteinander verknüpft werden. Die Notation ist einfach: abc
heißt, daß alle drei Bedingungen (a, b und c) erfüllt sein müssen; A+B, daß
Bedingung A oder B erfüllt sein muß; A-B, daß Bedingung A, aber nicht Bedingung
B erfüllt sein darf, wobei A und B für eine einfache oder zusammengesetzte
Bedingung stehen (z.B. wäre "abc+ac-bcd+eh-efg" eine gültige Verknüpfung).
Falls keine Verknüpfung angegeben wird, müssen alle Bedingungen erfüllt sein.

<p><form method="get" name="blz_form">
<table cellspacing=5>
<tr>
   <td title="Erste Suchbedingung">[a]</td>
   <td><select name="feld_a" title="Feld nach dem gesucht werden soll">
      <option value=0
$chk_a0>(auswählen)</option>
      <option value=1
$chk_a1>Volltext</option>
      <option value=2
$chk_a2>BIC</option>
      <option value=3
$chk_a3>Name</option>
      <option value=4
$chk_a4>Kurzname</option>
      <option value=5
$chk_a5>Ort</option>
      <option value=6
$chk_a6>BLZ</option>
      <option value=7
$chk_a7>PLZ</option>
      <option value=8
$chk_a8>Prüfziffer</option>
      <option value=9
$chk_a9>IBAN-Regel</option>
   </select>
   </td>
   <td><input type="text" name="int1_a"   value="
$int1_a_h" size="8" maxlength="13" title="Anfangswert für numerische Felder"></td>
   <td><input type="text" name="int2_a"   value="
$int2_a_h" size="8" maxlength="13" title="(optional) Endwert für numerische Felder"></td>
   <td><input type="text" name="string_a" value="
$string_a" size="30" maxlength="34" title="Textfeld"></td>
   <td title="Ergebnisstatus: 
$rv_a1">$rv_a</td>
</tr>

<tr>
   <td title="Zweite Suchbedingung">[b]</td>
   <td><select name="feld_b" title="Feld nach dem gesucht werden soll">
      <option value=0
$chk_b0>(auswählen)</option>
      <option value=1
$chk_b1>Volltext</option>
      <option value=2
$chk_b2>BIC</option>
      <option value=3
$chk_b3>Name</option>
      <option value=4
$chk_b4>Kurzname</option>
      <option value=5
$chk_b5>Ort</option>
      <option value=6
$chk_b6>BLZ</option>
      <option value=7
$chk_b7>PLZ</option>
      <option value=8
$chk_b8>Prüfziffer</option>
      <option value=9
$chk_b9>IBAN-Regel</option>
   </select>
   </td>
   <td><input type="text" name="int1_b"   value="
$int1_b_h" size="8" maxlength="13" title="Anfangswert für numerische Felder"></td>
   <td><input type="text" name="int2_b"   value="
$int2_b_h" size="8" maxlength="13" title="(optional) Endwert für numerische Felder"></td>
   <td><input type="text" name="string_b" value="
$string_b" size="30" maxlength="34" title="Textfeld"></td>
   <td title="Ergebnisstatus: 
$rv_b1">$rv_b</td>
</tr>

<tr>
   <td title="Dritte Suchbedingung">[c]</td>
   <td><select name="feld_c" title="Feld nach dem gesucht werden soll">
      <option value=0
$chk_c0>(auswählen)</option>
      <option value=1
$chk_c1>Volltext</option>
      <option value=2
$chk_c2>BIC</option>
      <option value=3
$chk_c3>Name</option>
      <option value=4
$chk_c4>Kurzname</option>
      <option value=5
$chk_c5>Ort</option>
      <option value=6
$chk_c6>BLZ</option>
      <option value=7
$chk_c7>PLZ</option>
      <option value=8
$chk_c8>Prüfziffer</option>
      <option value=9
$chk_c9>IBAN-Regel</option>
   </select>
   </td>
   <td><input type="text" name="int1_c"   value="
$int1_c_h" size="8" maxlength="13" title="Anfangswert für numerische Felder"></td>
   <td><input type="text" name="int2_c"   value="
$int2_c_h" size="8" maxlength="13" title="(optional) Endwert für numerische Felder"></td>
   <td><input type="text" name="string_c" value="
$string_c" size="30" maxlength="34" title="Textfeld"></td>
   <td title="Ergebnisstatus: 
$rv_c1">$rv_c</td>
</tr>

<tr>
   <td title="Vierte Suchbedingung">[d]</td>
   <td><select name="feld_d" title="Feld nach dem gesucht werden soll">
      <option value=0
$chk_d0>(auswählen)</option>
      <option value=1
$chk_d1>Volltext</option>
      <option value=2
$chk_d2>BIC</option>
      <option value=3
$chk_d3>Name</option>
      <option value=4
$chk_d4>Kurzname</option>
      <option value=5
$chk_d5>Ort</option>
      <option value=6
$chk_d6>BLZ</option>
      <option value=7
$chk_d7>PLZ</option>
      <option value=8
$chk_d8>Prüfziffer</option>
      <option value=9
$chk_d9>IBAN-Regel</option>
   </select>
   </td>
   <td><input type="text" name="int1_d"   value="
$int1_d_h" size="8" maxlength="13" title="Anfangswert für numerische Felder"></td>
   <td><input type="text" name="int2_d"   value="
$int2_d_h" size="8" maxlength="13" title="(optional) Endwert für numerische Felder"></td>
   <td><input type="text" name="string_d" value="
$string_d" size="30" maxlength="34" title="Textfeld"></td>
   <td title="Ergebnisstatus: 
$rv_d1">$rv_d</td>
</tr>

<tr>
   <td title="Fünfte Suchbedingung">[e]</td>
   <td><select name="feld_e" title="Feld nach dem gesucht werden soll">
      <option value=0
$chk_e0>(auswählen)</option>
      <option value=1
$chk_e1>Volltext</option>
      <option value=2
$chk_e2>BIC</option>
      <option value=3
$chk_e3>Name</option>
      <option value=4
$chk_e4>Kurzname</option>
      <option value=5
$chk_e5>Ort</option>
      <option value=6
$chk_e6>BLZ</option>
      <option value=7
$chk_e7>PLZ</option>
      <option value=8
$chk_e8>Prüfziffer</option>
      <option value=9
$chk_e9>IBAN-Regel</option>
   </select>
   </td>
   <td><input type="text" name="int1_e"   value="
$int1_e_h" size="8" maxlength="13" title="Anfangswert für numerische Felder"></td>
   <td><input type="text" name="int2_e"   value="
$int2_e_h" size="8" maxlength="13" title="(optional) Endwert für numerische Felder"></td>
   <td><input type="text" name="string_e" value="
$string_e" size="30" maxlength="34" title="Textfeld"></td>
   <td title="Ergebnisstatus: 
$rv_e1">$rv_e</td>
</tr>

<tr>
   <td title="Sechste Suchbedingung">[f]</td>
   <td><select name="feld_f" title="Feld nach dem gesucht werden soll">
      <option value=0
$chk_f0>(auswählen)</option>
      <option value=1
$chk_f1>Volltext</option>
      <option value=2
$chk_f2>BIC</option>
      <option value=3
$chk_f3>Name</option>
      <option value=4
$chk_f4>Kurzname</option>
      <option value=5
$chk_f5>Ort</option>
      <option value=6
$chk_f6>BLZ</option>
      <option value=7
$chk_f7>PLZ</option>
      <option value=8
$chk_f8>Prüfziffer</option>
      <option value=9
$chk_f9>IBAN-Regel</option>
   </select>
   </td>
   <td><input type="text" name="int1_f"   value="
$int1_f_h" size="8" maxlength="13" title="Anfangswert für numerische Felder"></td>
   <td><input type="text" name="int2_f"   value="
$int2_f_h" size="8" maxlength="13" title="(optional) Endwert für numerische Felder"></td>
   <td><input type="text" name="string_f" value="
$string_f" size="30" maxlength="34" title="Textfeld"></td>
   <td title="Ergebnisstatus: 
$rv_f1">$rv_f</td>
</tr>

<tr>
   <td title="Siebte Suchbedingung">[g]</td>
   <td><select name="feld_g" title="Feld nach dem gesucht werden soll">
      <option value=0
$chk_g0>(auswählen)</option>
      <option value=1
$chk_g1>Volltext</option>
      <option value=2
$chk_g2>BIC</option>
      <option value=3
$chk_g3>Name</option>
      <option value=4
$chk_g4>Kurzname</option>
      <option value=5
$chk_g5>Ort</option>
      <option value=6
$chk_g6>BLZ</option>
      <option value=7
$chk_g7>PLZ</option>
      <option value=8
$chk_g8>Prüfziffer</option>
      <option value=9
$chk_g9>IBAN-Regel</option>
   </select>
   </td>
   <td><input type="text" name="int1_g"   value="
$int1_g_h" size="8" maxlength="13" title="Anfangswert für numerische Felder"></td>
   <td><input type="text" name="int2_g"   value="
$int2_g_h" size="8" maxlength="13" title="(optional) Endwert für numerische Felder"></td>
   <td><input type="text" name="string_g" value="
$string_g" size="30" maxlength="34" title="Textfeld"></td>
   <td title="Ergebnisstatus: 
$rv_g1">$rv_g</td>
</tr>

<tr>
   <td title="Achte Suchbedingung">[h]</td>
   <td><select name="feld_h" title="Feld nach dem gesucht werden soll">
      <option value=0
$chk_h0>(auswählen)</option>
      <option value=1
$chk_h1>Volltext</option>
      <option value=2
$chk_h2>BIC</option>
      <option value=3
$chk_h3>Name</option>
      <option value=4
$chk_h4>Kurzname</option>
      <option value=5
$chk_h5>Ort</option>
      <option value=6
$chk_h6>BLZ</option>
      <option value=7
$chk_h7>PLZ</option>
      <option value=8
$chk_h8>Prüfziffer</option>
      <option value=9
$chk_h9>IBAN-Regel</option>
   </select>
   </td>
   <td><input type="text" name="int1_h"   value="
$int1_h_h" size="8" maxlength="13" title="Anfangswert für numerische Felder"></td>
   <td><input type="text" name="int2_h"   value="
$int2_h_h" size="8" maxlength="13" title="(optional) Endwert für numerische Felder"></td>
   <td><input type="text" name="string_h" value="
$string_h" size="30" maxlength="34" title="Textfeld"></td>
   <td title="Ergebnisstatus: 
$rv_h1">$rv_h</td>
</tr>
</table>

<p>Verknüpfung: <input type="text" name="verknuepfung" value="
$verknuepfung" size="50">

<p><a name="liste"></a><table><tr><td valign="top">
BLZ/Seite: <select name="blz_pro_seite" title="Anzahl BLZs pro Ausgabeseite" onchange="blz_form.submit()">
   <option value=10
$chk_bps_10>10</option>
   <option value=50
$chk_bps_50>50</option>
   <option value=100
$chk_bps_100>100</option>
   <option value=200
$chk_bps_200>200</option>
   <option value=500
$chk_bps_500>500</option>
</select>&nbsp;&nbsp;
</td><td>
HTML;
$qs="";
foreach(
$_REQUEST as $i=>$v)if($i!="blz_start")$qs.="&".urlencode($i)."=".urlencode($v);

if(empty(
$blz))$blz=array();
$j=intval(count($blz)/$blz_pro_seite);
if(
count($blz)>$j*$blz_pro_seite)$j++;
if(
$j>1)for($i=0;$i<$j;$i++)
   if(
$blz_start!=$i*$blz_pro_seite)
   
printf("<a href=\"?blz_start=%d%s#liste\" title=\"Seite %d\"> %d</a>\n",$i*$blz_pro_seite,$qs,$i+1,$i+1);
else
   
printf("<span title=\"Seite %d\"> %d</span>\n",$i+1,$i+1);

if(
$chk_a9 || $chk_b9 || $chk_c9 || $chk_d9 || $chk_e9 || $chk_f9 || $chk_g9 || $chk_h9)$zeige_regel=1; else $zeige_regel=0;
echo <<<HTML
</td></tr></table>
<input type="checkbox" name="uniq"
$uniq_chk onchange="blz_form.submit()"> Von jeder Bank nur eine Zweigstelle ausgeben<br>
<p><input type="submit" name="suchen7" value="Banken suchen"></td>

<input type="hidden" name="ausgabe" value="
$ausgabe">
<input type="hidden" name="sub" value="
$sub">
<input type="hidden" name="fix_nav" value="
$fix_nav">
<p><hr><p>

HTML;
      
$t4=microtime(1);
      
printf("<p><!-- Zeit für die Suche: %1.1f ms\n<br> -->Es wurden insgesamt %d Banken gefunden\n"
         
."<!--\n<br>Zeiten: <table>\n"
         
."<tr><td>Variablen:</td><td align=\"right\"> %1.3f ms</td></tr>\n"
         
."<tr><td>  init():</td><td align=\"right\"> %1.3f ms</td></tr>\n"
         
."<tr><td> suche_init(): </td><td align=\"right\">%1.3f ms</td></tr>\n"
         
."<tr><td> suche_set(): </td><td align=\"right\">%1.3f ms</td></tr>\n"
         
."<tr><td> suche: </td><td align=\"right\">%1.3f ms</td></tr>\n"
         
."</table>\n-->\n",
      (
$t4-$t1)*1000,count($blz),($t2-$t1)*1000,($t2a-$t2)*1000,($t2b-$t2a)*1000,($t2c-$t2b)*1000,($t3-$t2c)*1000);
      echo 
"<p><table cellspacing=5>\n";
      foreach(
$blz as $i=>$v){
         if(
$i>=$blz_start && $i<$blz_start+$blz_pro_seite){
            
$zw1=$zweigstelle[$i]+1;
            
$zs=(!$zweigstelle[$i])?"[HS] ":"[$zw1] ";
            if(
$zeige_regel)
               
$regel=sprintf(" (IBAN-Regel %d)",lut_iban_regel($v)/100);
            else
               
$regel="";
            echo 
"<tr><td align=\"right\" title=\"Index\">",$i+1,
                 
".</td><td title=\"anklicken für Detailinfos zur BLZ $v\"><a href=\"konto_test.php?ausgabe=2&sub=12&zeige_blz=$v\" target=\"blz_details\">$v</a></td>",
                 
"<td>$zs",lut_name($v,$ret,$zweigstelle[$i]),", ",
                 
lut_plz($v,$ret,$zweigstelle[$i])," ",lut_ort($v,$ret,$zweigstelle[$i]),"$regel\n";
         }
      }
      echo 
"</table>\n";
      break;

   case 
7:

      
#############################
      ####    mini.php          ###
      #############################

      
echo <<<HTML
<h2>Codebeispiel mini.php</h2>
Hier wird das Beispielsprogramm mini.php in einem iframe ausgeführt; so bleibt die
Navigation erhalten.

<p><iframe src="mini.php" width="700" height="600" name="mini.php">
HTML;
      break;

   case 
8:

      
#############################
      ####    Versionsinfo      ###
      #############################

      
$version="<em>konto_check</em> Bibliothek Version ".kto_check_version(1)
         .
" vom ".kto_check_version(6)
         .
"<br>Stand der Prüfziffermethoden: ".kto_check_version(4)
         .
"<br>Stand der IBAN-Regeln: ".kto_check_version(5);
      echo 
"<h2>Info zur <em>konto_check</em> Version:</h2>\n$version\n";

      break;

   case 
9:

      
########################
      ####    LUT-Info 1   ###
      ########################

   
lut_init("/etc/blz.lut",9,$set_init);    /* die LUT-Datei laden, und dann Infos über die Blocks ausgeben */
   
$ret=lut_info("",$info,$valid); /* Aufruf mit leerem Dateinamen: Info zu geladenen Blocks */
   
$valid_html=kto_check_retval2html($valid);
   if(
$ret==OK || $ret==LUT2_PARTIAL_OK){
      echo <<<HTML

<h2>Info zu in den Speicher geladenen Blocks:</h2>
Gültigkeit: 
$valid ($valid_html)
</div><div class="text_src">
<pre>
<p>
$info
</pre>
HTML;
   }
   break;

   case 
10:

      
########################
      ####    LUT-Info 2   ###
      ########################

   
$ret=lut_info("/etc/blz.lut",$info1,$valid1,$info2,$valid2,$info3,$slots);
   
$ret_scl=lut_scl_info("/etc/blz.lut",$scl_cnt,$scl_datum);
   if(
$ret_scl<0)
      
$scl_info="Keine SCL-Blocks in der LUT-Datei enthalten";
   else
      
$scl_info="Banken im SCL-Verzeichnis: $scl_cnt, Gueltigkeitsdatum: ab $scl_datum";
   
$valid1_html=kto_check_retval2txt_short($valid1)." / ".kto_check_retval2html($valid1);
   
$valid2_html=kto_check_retval2txt_short($valid2)." / ".kto_check_retval2html($valid2);
   if(
$ret==OK || $ret==LUT2_PARTIAL_OK){
      if(!empty(
$info2))$info2="<hr width=\"30%\" align=\"left\">\n$info2";

      echo <<<HTML
<h2>Info zur LUT-Datei /etc/blz.lut</h2>
</div><div class="text_src">
<table>
<tr><td
$tw>Datensatz 1: </td><td align="right"$tw$valid1  </td><td$tw>($valid1_html)</td></tr>
<tr><td
$tw>Datensatz 2: </td><td align="right"$tw$valid2 </td><td$tw>($valid2_html)</td></tr>
<tr><td
$tw>SCL: </td><td align="right"$tw$ret_scl </td><td align="right"$tw>$scl_info</td></tr>
</table>
<pre>
<p>
$info1
$info2
</pre>
<h2>Interna der LUT-Datei:</h2>
</div><div class="text_src">
<pre>
$info3

HTML;
      foreach(
$slots as $idx=>$value)echo $value,"\n";
      echo 
"</pre>\n<p>";
   }
   break;

   case 
11:

      
########################
      ####    LUT-Info 3   ###
      ########################

      
$ret=lut_valid_date("/etc/blz.lut",$v11,$v12,$v21,$v22);
      
$ret_scl=lut_scl_info("/etc/blz.lut",$scl_cnt,$scl_datum);
      if(
$v11>$v21){ /* Reihenfolge der Datensätze vertauscht */
         
$v1=$v11;
         
$v2=$v12;
         
$v11=$v21;
         
$v12=$v22;
         
$v21=$v1;
         
$v22=$v2;
      }
      
$g1=idate2str($v11)." - ".idate2str($v12);
      
$g2=idate2str($v21)." - ".idate2str($v22);
      
$fs=filesize("/etc/blz.lut");
      
$fsk=intval($fs/1024);
      
$ret_scl=lut_scl_info("/etc/blz.lut",$scl_cnt,$scl_datum);

      echo <<<HTML
<h2>LUT-Info 3 zur LUT-Datei /etc/blz.lut</h2>
</div><div class="text_src">
Gültigkeit Datensatz 1: 
$g1<br>
Gültigkeit Datensatz 2: 
$g2<br>
Anzahl SCL: 
$scl_cnt<br>
SCL Datum: 
$scl_datum<br>
size: 
$fs Byte ($fsk kB)
</div>

HTML;

      break;

   case 
12:

      
########################
      ####    Quellcode    ###
      ########################

   
$name=$_SERVER["SCRIPT_FILENAME"];  /* Skriptnamen holen */
   
echo "<h2>Quellcode dieses Skriptes</h2>\n</div>\n<div class=\"text_src\">\n";
   
show_source($name);
   echo 
"</body>\n</html>\n";
   exit(
0);

   case 
13:

      
#####################################
      ####    Detailinfo zu einer BLZ   ###
      #####################################

      
echo "<h2>Detailinfo zu BLZ $zeige_blz</h2>\n";
      
lut_init("/etc/blz.lut",9,$set_init);
      
$multi=lut_multiple($zeige_blz,0,$anzahl,$name,$name_kurz,$plz,$ort,$pan,$bic,$pz,$nr,
            
$aenderung,$loeschung,$nachfolge_blz);
      if(
$multi==OK || $multi==LUT2_PARTIAL_OK){
         echo <<<HTML
<p>Eine Erläuterung der einzelnen Felder findet sich im
<a href="http://www.bundesbank.de/Redaktion/DE/Downloads/Kerngeschaeftsfelder/Unbarer_Zahlungsverkehr/Bankleitzahlen/merkblatt_bankleitzahlendatei.pdf?__blob=publicationFile" target="_blank">Merkblatt
Bankleitzahlendatei (PDF)</a> der Deutschen Bundesbank.

<p><table>
   <tr><td>BLZ:</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
$zeige_blz</td></tr>
   <tr><td>Bank:</td><td></td><td>
$name</td></tr>
   <tr><td>Filialen:</td><td></td><td>
$anzahl</td></tr>
   <tr><td>PLZ/Ort:</td><td></td><td>
$plz $ort</td></tr>
   <tr><td>Kurzbezeichnung:</td><td></td><td>
$name_kurz</td></tr>
   <tr><td>BIC:</td><td></td><td>
$bic</td></tr>
   <tr><td>Prüfziffermethode:</td><td></td><td>
$pz</td></tr>
   <tr><td>Datensatz-Nr.:</td><td></td><td>
$nr</td></tr>
   <tr><td>Instituts-Nr. PAN:</td><td></td><td>
$pan</td></tr>
   <tr><td>Änderung:</td><td></td><td>
$aenderung</td></tr>
   <tr><td>Löschung:</td><td></td><td>
$loeschung</td></tr>
   <tr><td>Nachfolge-BLZ:</td><td></td><td>
$nachfolge_blz</td></tr>
</table>
HTML;
      echo 
"<h3>Name, PLZ und Ort der Filialen:</h3>\n<table>\n";
      for(
$i=1;$i<=$anzahl;$i++)
         echo 
"<tr><td align=\"right\"> $i. &nbsp; </td><td>",
              
lut_name($zeige_blz,$ret,$i-1),"&nbsp;&nbsp;</td><td>",
              
lut_plz($zeige_blz,$ret,$i-1),"</td><td> ",
              
lut_ort($zeige_blz,$ret,$i-1),"</td></tr>";
      echo 
"</table>\n";
   }
   else
      echo 
"Rückgabewert von lut_multiple:  $multi / ",kto_check_retval2txt($multi),"\n";      
   break;

}

echo 
"</form>\n";

lut_init("/etc/blz.lut",9,$set_init); /* Bibliosthek initialisieren (Defaultdatei, aber alle Felder) */

if($kto_test || $kto_test_r || $iban_gen || $iban_test || $iban2bic || $zweck_gen || $zweck_test || $suchen || $suchenx || !empty($liste3))
   echo 
"<p>&nbsp;<p><hr width=80%>\n<h2>Ergebnis</h2>\n";

########################################################################################
###                   Einzeltest                                                     ###
########################################################################################

if($methode_test){ /* mit Prüfziffermethode testen */
   
if(strlen($methode)==1)$methode="0$methode";

      
/* die Funktion kto_check_pz_dbg() gibt im 4. und 5. Parameter die benutzte
       * Prüfziffermethode zurück: im vierten als String, im fünften numerisch
       * in der intern verwendeten Form (die dann für lut_methode_txt() benutzt
       * werden kann).
       */
   
$ret=kto_check_pz_dbg($methode,$kto1,0,$methode,$methode1);
   
$ret_html=kto_check_retval2html($ret);
   echo 
"<p>&nbsp;<p><center><hr width=80%></center>\n";
   echo 
"Test mit der Prüfziffermethode $methode$ret / $ret_html\n";
   if(
$methode_txt){
      echo 
"<h3>Beschreibung der verwendeten Prüfziffermethode</h3>\n<p><pre>";
      do{

         
/* Beschreibung (die Kodierung ist ISO-8859-1, daher htmlentities()
          * benutzt) und nächste zu verwendende Methode holen. Im zweiten
          * Parameter von lut_methode_txt() wird die Folgemethode zurückgeliefert,
          * (falls eine solche existiert); falls nicht, wird der Parameter
          * auf -1 gesetzt. Der Parameter $methode1 wird im Aufruf von kto_check_pz_dbg()
          * gesetzt. Im Aufruf von lut_methode_txt() wird er sowohl als Parameter
          * als auch als Rückgabeparameter benutzt.
          */
         
$txt=htmlentities(lut_methode_txt($methode1,$methode1),0,'iso-8859-1');
         echo 
"$txt\n\n";
      }while(
$methode1>=0);
   }
   if(!empty(
$regel) && $iban_regel_txt)echo iban_regel_txt($regel),"\n\n";
}

if(
$iban_gen){ /* IBAN generieren */
   
lut_init("/etc/blz.lut",9,$set_init);
   
$blz_i=$blz;
   if(
$force_iban)$blz_i="@$blz_i";
   if(
$force_iban2)$blz_i="+$blz_i";
   
$iban=iban_gen($blz_i,$kto,$retval,$papier,$bic,$blz2,$kto2);
   
$iban_regel=lut_iban_regel($blz,$ret_regel);
   
$iban_regel1=sprintf("%d",$iban_regel/100);
   
$iban_regel2=sprintf("%02d",$iban_regel%100);
   
$retval_txt=kto_check_retval2html($retval);
   
$retval_txt_r=kto_check_retval2html($ret_regel);

   echo <<<HTML
<table>
   <tr><td>IBAN:</td><td>
$iban</td></tr>
   <tr><td>BIC:</td><td>
$bic</td></tr>
   <tr><td>Papierform:</td><td>
$papier</td></tr>
   <tr><td>IBAN-Regel:</td><td>
$iban_regel1, Version $iban_regel2</td></tr>
   <tr><td>benutzte Bankverbindung:</td><td>BLZ 
$blz2, Kto. $kto2</td></tr>
   <tr><td>Rückgabewert der IBAN-Berechnung:</td><td>
$retval / $retval_txt</td></tr>
</table>
<p><i>Anmerkung:</i> Zur Bestimmung der IBAN werden die von der Deutschen Bundesbank veröffentlichten
IBAN-Regeln benutzt. Durch die Regeln werden in bestimmten Fällen BLZ und/oder Kontonummer
ersetzt bzw. modifiziert. Es ergibt sich dabei oft auch ein anderer BIC als der, der in der BLZ-Datei
angegeben ist.

HTML;
   if(
$iban_regel_txt)echo iban_regel_txt($iban_regel1),"\n\n";
}

if(
$kto_test || $kto_test_r){ /* Bankverbindung testen */

      /* die Funktion kto_check_blz_dbg() gibt im 3. und 4. Parameter die benutzte
       * Prüfziffermethode zurück: im dritten als String, im vierten numerisch
       * in der intern verwendeten Form.
       */
   
lut_init("/etc/blz.lut",9,$set_init);
   if(
$kto_test_r){
      
$ret=kto_check_regel_dbg($blz,$kto,$rv);
      
$blz2=$rv['blz2'];
      
$kto2=$rv['kto2'];
      
$bic2=$rv['bic2'];
      
$regel=$rv['regel'];
      
$methode=$rv['methode'];
      
$methode1=$rv['pz_methode'];
   }
   else
      
$ret=kto_check_blz_dbg($blz,$kto,$methode,$methode1);
   
$ret_html=kto_check_retval2html($ret);
   echo <<<HTML
<table>
<tr><td>Testergebnis:</td><td>
$ret / $ret_html</td></tr>
<tr><td>Prüfziffermethode:</td><td>
$methode</td><tr>

HTML;
   if(
$kto_test_r)echo <<<HTML
<tr><td>Benutzte BLZ:</td><td>$blz2</td></tr>
<tr><td>Benutzte Kontonummer:</td><td>
$kto2</td></tr>
<tr><td>BIC:</td><td>
$bic2</td></tr>
<tr><td>IBAN-Regel:</td><td>
$regel</td></tr>

HTML;
   echo 
"</table>\n";
   if(
$methode_txt){
      echo 
"<h3>Beschreibung der verwendeten Prüfziffermethode</h3>\n<p><pre>";
      do{
         
/* Beschreibung (Kodierung ist in ISO-8859-1, daher htmlentities()
          * verwenden) und nächste zu verwendende Methode holen.
          */
         
$txt=htmlentities(lut_methode_txt($methode1,$methode1),0,'iso-8859-1');
         echo 
"$txt\n\n";
      }while(
$methode1>=0);
      echo 
"</pre>\n<p>\n";
   }
   if(!empty(
$regel) && $iban_regel_txt)echo iban_regel_txt($regel),"\n\n";
}

if((
$kto_test_r || $kto_test) && $detail || $suchenx){ /* Infos zu einer Bank ausgeben */
   
if($suchenx==8)$blz=$blz3;

      
/* alles in einem Rutsch holen */
   
$multi=lut_multiple($blz,0,$anzahl,$name,$name_kurz,$plz,$ort,$pan,$bic,$pz,$nr,
         
$aenderung,$loeschung,$nachfolge_blz);
   
$multi_txt=kto_check_retval2txt($multi);
   
$r=lut_iban_regel($blz);
   
$regel=sprintf("Regel %d, Version %02d",$r/100,$r%100);
   echo 
"<h3>Infos zu BLZ $blz:</h3>";
   if(
$multi==OK ||$multi==LUT2_PARTIAL_OK){
      echo <<<HTML
<table>
   <tr><td>BLZ:</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
$blz</td></tr>
   <tr><td>Bank:</td><td></td><td>
$name</td></tr>
   <tr><td>Filialen:</td><td></td><td>
$anzahl</td></tr>
   <tr><td>PLZ/Ort:</td><td></td><td>
$plz $ort</td></tr>
   <tr><td>Kurzbezeichnung:</td><td></td><td>
$name_kurz</td></tr>
   <tr><td>BIC:</td><td></td><td>
$bic</td></tr>
   <tr><td>Prüfziffermethode:</td><td></td><td>
$pz</td></tr>
   <tr><td>IBAN-Regel:</td><td></td><td>
$regel</td></tr>
   <tr><td>Nr.:</td><td></td><td>
$nr</td></tr>
   <tr><td>Änderung:</td><td></td><td>
$aenderung</td></tr>
   <tr><td>Löschung:</td><td></td><td>
$loeschung</td></tr>
   <tr><td>Nachfolge-BLZ:</td><td></td><td>
$nachfolge_blz</td></tr>
</table>
HTML;
      echo 
"<h3>Name, PLZ und Ort der Filialen:</h3>\n<table>\n";
      for(
$i=1;$i<=$anzahl;$i++)
         echo 
"<tr><td align=\"right\"> $i. &nbsp; </td><td>",
              
lut_name($blz,$ret,$i-1),", </td><td> ",
              
lut_plz($blz,$ret,$i-1)," </td><td> ",
              
lut_ort($blz,$ret,$i-1),"</td></tr>";
      echo 
"</table>\n";
   }
   else
      echo 
"Rückgabewert von lut_multiple:  $multi / $multi_txt\n";
}

if(
$iban_test && $iban){   /* IBAN testen */
   
$ret=iban_check($iban,$ret1);
   
$ret_html=kto_check_retval2html($ret);
   
$ret1_html=kto_check_retval2html($ret1);
   echo 
"Test der IBAN: $ret / $ret_html<br>\n";
   echo 
"Test der Bankverbindung: $ret1 / $ret1_html<br>\n";
}

if(
$iban2bic){    /* Bankverbindung aus der IBAN bestimmen */
   
$bic=iban2bic($iban,$ret,$blz,$kto);   /* Die Funktion gibt BIC, BLZ und kto zurück */
   
$ret_html=kto_check_retval2html($ret);
   if(
$ret!=IBAN2BIC_ONLY_GERMAN){
      
$name=lut_name($blz,$ret1);   /* hier werden die Infos einzeln geholt */
      
$ret1_html=kto_check_retval2html($ret1);
      if(
$ret1==OK){    /* BLZ ist ok, weitere Sachen holen */
         
$plz=lut_plz($blz);
         
$ort=lut_ort($blz);
         
$name_kurz=lut_name_kurz($blz);
      }
      else{
         
$plz="";
         
$ort=$name=$name_kurz=$bic="-";
      }
      
$ret_kc=kto_check_blz($blz,$kto);
      
$ret_kc_html=kto_check_retval2html($ret_kc);
      echo <<<HTML
<table>
   <tr><td>Rückgabe von iban2bic:</td><td></td><td>
$ret / $ret_html</td></tr>
   <tr><td>BIC:</td><td></td><td>
$bic</td></tr>
   <tr><td>BLZ:</td><td></td><td>
$blz</td></tr>
   <tr><td>Konto:</td><td></td><td>
$kto</td></tr>
   <tr><td>Bank:</td><td></td><td>
$name</td></tr>
   <tr><td>Ort:</td><td></td><td>
$plz $ort</td></tr>
   <tr><td>Kurzname: </td><td></td><td>
$name_kurz</td></tr>
   <tr><td>Kontoprüfung:</td><td></td><td>
$ret_kc / $ret_kc_html</td></tr>
</table>
HTML;
   }
   else
         echo 
"Fehler: $ret_html";
}

if(
$zweck_test){   /* Strukturierten Verwendungszweck (IPI) testen */
   
$ret=ipi_check($zweck);
   
$ret_html=kto_check_retval2html($ret);
   echo 
"Test des strukturierten Verwendungszwecks: $ret / $ret_html<br>\n";
}

if(
$zweck_gen){   /* Strukturierten Verwendungszweck (IPI)  generieren */
   
$out=ipi_gen($zweck,$ret,$papier);
   
$ret_html=kto_check_retval2html($ret);
   if(
$ret==OK)
      echo <<<HTML
<table>
   <tr><td>Strukturierter Verwendungszweck:</td><td>&nbsp;&nbsp;&nbsp;</td><td>
$out</td></tr>
   <tr><td>Papierform:</td><td></td><td>
$papier</td></tr>
   <tr><td>Rückgabewert:</td><td></td><td>
$ret / $ret_html</td></tr>
</table>
HTML;
   else
      echo 
"Rückgabewert: $ret / $ret_html<br>\n";
}

########################################################################################
###                   Listentest                                                     ###
########################################################################################

if(!empty($liste3)){
   if(
$tabelle=="tabelle")
      
$ausgabe_txt="<table cellspacing=\"5\">";
   else
      
$ausgabe_txt="<pre>";
   
$cnt=0;
   
$benutzte_rv=array();
   if(
$_REQUEST['q']=='Liste prüfen'){
      foreach(
$liste3 as $i=>$zeile){
         if(++
$cnt>1000)break;   /* Maximalzahl erreicht (1000 Konten pro Aufruf) */
         
$zeile_a=split("[ \t]+",$zeile,3);
         if(
count($zeile_a)>1){ /* BLZ/Konto Kombination vorhanden */
            
$b=$zeile_a[0];
            
$k=$zeile_a[1];
            if(
strlen($b)==1){
               
$ret=kto_check_pz_dbg("0$b",$k,0,$methode);
               
$blz_link=sprintf("%8s",$b);
            }
            else if(
strlen($b)<4){
               
$ret=kto_check_pz_dbg($b,$k,0,$methode);
               
$blz_link=sprintf("%8s",$b);
            }
            else{
               
$ret=kto_check_blz_dbg($b,$k,$methode);
               
$blz_link=blz_link($b);
            }
            
$txt=kto_check_retval2html($ret);
            if(
$methode_liste && $ret>=0)
               
$ml=" mit Methode $methode";
            else
               
$ml="";
            if(
$tabelle=="tabelle")
               
$ausgabe_txt.="<tr valign=\"top\"><td align=\"right\"$tw>$blz_link</td>"
                  
."<td align=\"right\"$tw>$k</td>"
                  
."<td$tw>$txt$ml</td></tr>\n";
            else
               
$ausgabe_txt.=sprintf("%s  %010s  %s%s\n",$blz_link,$k,$txt,$ml);
         }
      }
   }
   else{
      foreach(
$liste3 as $i=>$zeile){  /* Liste nach IBAN umwandeln */
         
if(++$cnt>1000)break;   /* Maximalzahl erreicht (1000 Konten pro Aufruf) */
         
$zeile_a=split("[ \t]+",$zeile,3);
         if(
count($zeile_a)>1){ /* BLZ/Konto Kombination vorhanden */
            
$b=$zeile_a[0];
            
$k=$zeile_a[1];
            if(
$force_iban)$b="@$b";
            if(
$force_iban2)$b="+$b";
            
$iban=iban_gen($b,$k,$ret,$p,$bic);
            
$benutzte_rv[$ret]++;
            
$rv="";
            if(
$kc_num || $kc_txt1 || $kc_txt2){
               
$txt1=kto_check_retval2txt_short($ret);
               
$txt2=kto_check_retval2html($ret);
               if(
$kc_num){
                  if(
$tabelle=="tabelle")
                     
$rv.="<td>$ret</td>";
                  else
                     
$rv.="\t$ret";
               }
               if(
$kc_txt1){
                  if(
$tabelle=="tabelle")
                     
$rv.="<td>$txt1</td>";
                  else
                     
$rv.="\t$txt1";
               }
               if(
$kc_txt2){
                  if(
$tabelle=="tabelle")
                     
$rv.="<td>$txt2</td>";
                  else
                     
$rv.="\t$txt2";
               }
            }
            }
            if(
$papier)$iban=$p;
            if(
$iban_regel){
               
$ibr=lut_iban_regel($b);
               if(
$tabelle=="tabelle")
                  
$iban_r=sprintf("<td>Regel %d, Version %02d</td>",$ibr/100,$ibr%100);
               else
                  
$iban_r=sprintf("\tRegel %d, Version %02d",$ibr/100,$ibr%100);
            }
            else
               
$iban_r="";
            if(
$tabelle=="tabelle"){
               
$ausgabe_txt.="<tr valign=\"top\"><td align=\"right\"$tw>$b</td>"
                  
."<td align=\"right\"$tw>$k</td>"
                  
."<td$tw>$iban</td><td$tw>$bic</td><td$tw>$iban_r$rv</tr>\n";
            }
            else
               
$ausgabe_txt.=sprintf("%s\t%s\t%s %s %s%s\n",$b,$k,$iban,$bic,$iban_r,$rv);
         }
      }
      if(
$uebersicht_rueckgabe){
         echo 
"<h3>Benutzte Rückgabewerte</h3>\n";
         
ksort($benutzte_rv,SORT_NUMERIC);
         echo 
"<table>\n<th>Wert</th><th>Anz.</th><th align=\"left\">Text</th></tr>\n";
         foreach(
$benutzte_rv as $idx=>$value)echo "<tr valign=\"top\"><td align=\"right\">$idx&nbsp;</td><td align=\"right\">$value&nbsp;</td><td class\"=td-b\">",kc_txt($idx),"</td></tr>\n";
         echo 
"</table>\n<h3>Ergebnisse</h3>\n";
      }


      if(
$tabelle=="tabelle")
         echo 
"$ausgabe_txt</table>";
      else
         echo 
"$ausgabe_txt</pre>";
      echo 
"<p>Anzahl geprüfter Konten: $cnt\n";
}

########################################################################################
###                   Banken suchen                                                  ###
########################################################################################

if($suchen){
   
$hauptstellen2=0;
   switch(
$suchen){
      case 
1:
        
$result=lut_suche_namen($name,$ret,$blz1,$idx,$sort_uniq);
        break;
      case 
2:
        
$result=lut_suche_namen_kurz($name_kurz,$ret,$blz1,$idx,$sort_uniq);
        break;
      case 
3:
        
$result=lut_suche_ort($ort,$ret,$blz1,$idx,$sort_uniq);
        break;
      case 
4:
        
$result=lut_suche_bic($bic1,$ret,$blz1,$idx,$sort_uniq);
        break;
      case 
5:
        
$result=lut_suche_plz($plz1,$plz2a,$ret,$blz1,$idx,$sort_uniq);
        break;
      case 
6:
        
$result=lut_suche_blz($blz1,$blz2a,$ret,$blz1,$idx,$sort_uniq);
        
$hauptstellen2=1;
        break;
      case 
7:
        
$result=lut_suche_pz($pz1a,$pz2a,$ret,$blz1,$idx,$sort_uniq);
        
$hauptstellen2=1;
        break;
      case 
9:
        
$result=lut_suche_regel($regel1,$regel2,$ret,$blz1,$idx,$sort_uniq); /*sort_uniq einstellen*****/
        
$hauptstellen2=1;
        break;
   }

      
/* Hauptstellen zählen */
   
$hs=0;
   if(!
$hauptstellen2)foreach($result as $i=>$v)if(!$idx[$i])$hs++;

   if(
$suchen==2)
      
$n_titel='<th title="Name der Bank (Kurzform)">Kurzname</th>';
   else
      
$n_titel='<th title="Name der Bank (Langform)">Name</th>';

   if(
$hauptstellen || $hauptstellen2)
      
$zw_titel='<th title="Anzahl Filialen)">Filialen</th>';
   else
      
$zw_titel='<th title="Zweigstellen-Index (Hauptstelle: 0)">Index</th>';

   if(!
$hauptstellen2)
      
$hsx=" ($hs Hauptstellen)";
   else
      
$hsx="";
   echo 
"<p>",count($result)," Banken gefunden$hsx\n";
   if(
count($result)){
      echo <<<HTML
</div>
<div class="text_src">
<p><table cellspacing="7">
<tr align="left">
   <th title="Rückgabewert von lut_multiple()">ret</th>
   <th title="Bankleitzahl">BLZ</th>
   
$zw_titel
   <th title="Prüfzifferverfahren">PZ</th>
   <th title="IBAN-Regel">IBAN-R.</th>
   <th title="Bank Identifier Code">BIC</th>
   
$n_titel
   <th title="Postleitzahl und Ort der Bank">PLZ und Ort</th>
</tr>

HTML;

      
/* Array mit den Prüfziffermethoden aufbauen */
   
$a=ord('A');
   for(
$i=0;$i<300;$i++)if($i<100)
      
$xpz[$i]=sprintf("%02d",$i);
   else
      
$xpz[$i]=sprintf("%c%d",$i/10-10+$a,$i%10);

      
/* nun die gefundenen Banken ausgeben */
   
foreach($result as $i=>$v){
      
$index=$idx[$i];

         
/* bei $hauptstellen=1 nur die Hauptstellen ausgeben (diese haben $index=0) */
      
if(!$index || !$hauptstellen){
         
$blz=$blz1[$i];
         
$ret=kto_check_retval2txt_short(lut_multiple($blz,$index,
                  
$anzahl,$name,$name_kurz,$plz,$ort,$pan,$bic,$pz));
         
$pz=$xpz[$pz];
         
$regel=sprintf("%d",lut_iban_regel($blz)/100);
         if(
$suchen==2)$name=$name_kurz;  /* es wurde nach dem Kurznamen gesucht */
         
if($hauptstellen || $hauptstellen2)
            
$index=lut_filialen($blz); /* Anzahl Filialen */
         
else
            
$index++;   /* Index der Hauptstelle auf 1 (statt 0) setzen */
         
$blz_link=blz_link($blz);
         echo <<<HTML
<tr>
   <td>
$ret </td>
   <td>
$blz_link</td>
   <td align="right"> 
$index </td>
   <td align="right"> 
$pz </td>
   <td align="right"> 
$regel </td>
   <td> 
$bic </td>
   <td> 
$name </td>
   <td> 
$plz $ort </td>
</tr>
HTML;
         }
      }
      echo 
"</table>\n";
   }
}
lut_cleanup(); /* Speicher freigeben */
?>
</div></div>
</body>
</html>