<?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>7 && $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') ? 7 : 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($tilicleaned, 0, $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>