<?php header('Content-Type: text/html; charset=utf-8'); ?><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<title>Muunna suomalaiset tilinumerot SEPA-alueen IBAN-numeroiksi</title>
<link rel="stylesheet" href="iban.css">
</head>
<body>
<?php
//(c) 2010-2014  VV-Soft Oy

if (isset($_GET['source'])) {
    
highlight_file('iban.php');
    die(
'</body></html>');
}
class 
AccountFormat {
    public 
$BIC="";
    function 
AccountFormat($BIC) {
        
$this->BIC $BIC;
    }
}

if (isset(
$_POST['tilit'])) {
    
$af['1,2'] = new AccountFormat('NDEAFIHH');
    
$af['5'] = new AccountFormat('OKOYFIHH');
    
$af['6'] = new AccountFormat('AABAFI22');
    
$af['8'] = new AccountFormat('DABAFIHH');
    
$af['31'] = new AccountFormat('HANDFIHH');
    
$af['33'] = new AccountFormat('ESSEFIHX');
    
$af['34'] = new AccountFormat('DABAFIHX');
    
$af['36'] = new AccountFormat('SBANFIHH');
    
$af['37'] = new AccountFormat('DNBAFIHX');
    
$af['38'] = new AccountFormat('SWEDFIHH');
    
$af['39'] = new AccountFormat('SBANFIHH');
    
$af['470-479'] = new AccountFormat('POPFFI22');
    
$af['713'] = new AccountFormat('CITIFIHX');
    
$af['405,497'] = new AccountFormat('HELSFIHH');
    
$af['715,400,402,403,406-408,410-412,414-421,423-432,435-452,454-464,483-493,495-496'] = new AccountFormat('ITELFIHH');
    
    
$rivivaihdot = array("\r\n","\n\r","\r");
    
$tilit explode("\n",str_replace($rivivaihdot,"\n",$_POST['tilit']));
    if (
$tilit[count($tilit)-1]=='') unset($tilit[count($tilit)-1]);
    
    
$tsv = (isset($_POST['mode']) && $_POST['mode']=='tsv');
?><h1>IBAN-muunnon tulos</h1>
<p>Halutessasi voit <a href="iban.php">palata tekemään uuden muunnoksen</a></p>
<? 
    
if ($tsv) {  
        echo 
'<form method="post" action="about:blank" target="_blank">';
        echo 
'<textarea name="tulos" rows="30" cols="80">';
    } else { 
        echo 
'<table>';
    }
    
    
$showOrig = isset($_POST['FieldOrig']);
    
$showIBAN = isset($_POST['FieldIBAN']);
    
$showIBAH = isset($_POST['FieldIBAH']);
    
$showBIC = isset($_POST['FieldBIC']);
    
    if (!(
$showOrig || $showIBAN || $showBIC)) $showIBAH true;
    
    foreach (
$tilit as $tili) {
        
$ok false;
        
$tilicleaned =     preg_replace('/\D+/'''$tili);
        
$tclen strlen($tilicleaned);
        if (
$tclen>&& $tclen<15) {
            
$fm null;
            
            foreach (
$af as $key => $value) {
                
$parts explode(','$key);
                foreach (
$parts as $part) {
                    
$hparts explode('-',$part);
                    
$tiliub substr($tilicleaned,0,strlen($hparts[0]));
                    if ((
count($hparts) == 1
                        ? (
$tiliub == $hparts[0])
                        : (
$tiliub >= $hparts[0] && $tiliub <= $hparts[1])
                        ) { 
$fm $value; break; }
                }
                if (
$fm != null) { break; }
            }
            
            
$MLen = ($tilicleaned{0}=='4' || $tilicleaned{0}=='5') ? 6;
            
            if (isset(
$af[$tilicleaned{0}])) $fm $af[$tilicleaned{0}];
            elseif (isset(
$af[substr($tilicleaned,0,2)])) $fm $af[substr($tilicleaned,0,2)];
            if (
$fm !== null) {
                if (
$tclen<14) {
                    
$tilicleaned substr($tilicleaned0$MLen) . substr('00000000',0,14-$tclen) . substr($tilicleaned$MLen);
                }
                
$sum 0;
                for (
$i=0$i<14$i++) {
                    
$a $tilicleaned{$i};
                    if ((
$i 1) == 0) {
                        
$a*=2;
                        if (
$a>9$a-=9;
                    }
                    
$sum+=$a;
                }
                if ((
$sum 10) == 0$ok true;
            }
        }
        
        
$vals = array();
        if (
$showOrig$vals[] = htmlspecialchars($tili);
        
        if (
$ok) {
            
$IBANTN = ((substr($tilicleaned,0,7) % 97) . substr($tilicleaned,7)) % 97;
            
$IBANTN 198 - (($IBANTN '151800') % 97);
            
$IBAN 'FI'.substr($IBANTN,1,2).$tilicleaned;
            
            if (
$showIBAN$vals[] = $IBAN;
            if (
$showIBAH$vals[] = implode(' ',str_split($IBAN,4));
            if (
$showBIC$vals[] = $fm->BIC;
        } else {
            
$vals[] = 'Virheellinen tilinumero';
        }
        if (
$tsv) echo implode("\t",$vals)."\n";
        else {
            echo 
'<tr><td>';
            echo 
implode('</td><td>',$vals);
            echo 
'</td><tr>';
        }
        
    }
    
    if (
$tsv) {  
        echo 
'</textarea></form>';
    } else { 
        echo 
'</table>';
    }
    
} else {
    
?><h1>Ilmainen IBAN-muunnin</h1>
<p>Laskentamalli ajan tasalla marraskuussa 2014 (Säästöpankkiryhmän eriytyminen Aktiasta huomioitu)</p>
<p>Tämän muuntimen avulla voit muuntaa kaikkien pankkien perinteisiä suomalaisia tilinumeroita IBAN-muotoon</p>
<p>Muunnin hyväksyy tilinumerot missä tahansa suomalaiselle tilinumerolle kelvollisessa normaalissa tai konekielisessä muodossa, esimerkiksi saman tilin seuraavat muodot käy:</p>
<ul>
<li>123456-785</li>
<li>123456-00000785</li>
<li>12345600000785</li>
</ul>
<p>Kaikki muut merkit paitsi numerot ja väliviivat jätetään huomiotta</p>
<h2>Muunnin</h2>
<form method="post" action="iban.php"><p>Tilinumerot: (voit syöttää kerralla useita tilinumeroita, kunkin omalle rivilleen)<br>
<textarea name="tilit" rows="30" cols="20"></textarea><br>
Haluan tulokseen seuraavat kentät:<br>
<input type="checkbox" name="FieldOrig" value="on">Alkuperäinen tilinumero
<input type="checkbox" name="FieldIBAN" value="on">IBAN (konekielinen)
<input type="checkbox" name="FieldIBAH" value="on" checked="checked">IBAN (selväkielinen)
<input type="checkbox" name="FieldBIC" value="on" checked="checked">BIC
<br><br>
Haluan tuloksen seuraavaan muotoon:<br>
<input type="radio" name="mode" value="table" checked="checked">HTML-taulukko (selkeä lukea/tulostaa)<br>
<input type="radio" name="mode" value="tsv">Tabulaattorieroteltu tekstikenttä (helppo kopioida taulukkolaskentaan)
<br><br>
<input type="submit" value="Muunna">
</p></form><?php

}
?>
<h2>Tietoturva</h2>
<p><strong>Kysymys</strong>: Ette kai tallenna tilinumeroita?</p>
<p><strong>Vastaus 1</strong>: Emme tallenna, mutta älä usko meitä!<br />
<strong>Vastaus 2</strong>: Mitä sitten vaikka tallentaisimmekin?</p>

<p>Kysymys on mielenkiintoinen muutamastakin syystä:</p>
<ol><li>Miksi tallentaisimme? Nähdäksemme tilinumerolla tai joukolla tilinumeroita ei ole mitään arvoa.</li>
<li>Voisimme myös muodostaa koneellisesti tuhansittain tilinumeroita, joten miksi keräisimme niitä "yleisöltä"?</li>
<li>Jos keräisimme numeroita johonkin epärehelliseen tarkoitukseen, niin mikä estäisi meitä valehtelemasta kysyttäessä?</li>
</ol>
<p>Kohdan kolme huomioiden suosittelemme kaikkia tietoturvasta välittäviä ja tilinumeroita arvokkaina pitäviä kopioimaan
laskurin <a href="iban.php?source">lähdekoodin</a>, tarkistamaan sen ja ajamaan sitä omalla palvelimella.
Tämä on nähdäksemme ainoa keino varmistua ettei tilinumeroita päädy ulkopuolisille.</p>

<p>
    <a href="http://validator.w3.org/check?uri=referer"><img
        src="im/valid-html401-blue.png"
        alt="Valid HTML 4.01 Strict" height="31" width="88"></a>
</p>
</body></html>