Jax
2008-01-15 20:14:37 UTC
Visto che non ho trovato una mazza in giro, oggi mi sono messo lì e una
mezz'oretta l'ho fatto (incredibile ma vero sembra giusto al primo
colpo... strano, conoscendomi).
Lo posto sperando che possa essere a qualcuno, e vi invito a migliorarlo.
function Calcola_BBAN($abi, $cab, $ccc, &$cin) {
$contributi =
array( 1, 0, 5, 7, 9, 13, 15, 17, 19, 21, 2,
4, 18, 20, 11, 3, 6, 8, 12, 14, 16, 10,
22, 25, 24, 23);
$arr_bban = str_split($abi . $cab . $ccc);
$pari = false;
$somma = 0;
foreach ($arr_bban as $char) {
$char2 = is_numeric($char) ? $char : ord($char)-65;
$somma += $pari ? $char2 : $contributi[$char2];
$pari = !$pari;
}
$cin = chr(($somma % 26)+65);
return $cin . $abi . $cab . $ccc;
}
Ovviamente ha bisogno di abi, cab e c/c passati in forma corretta: per
adesso io li "depuro" così:
$abi = str_pad($abi, 5, "0", STR_PAD_LEFT);
$cab = str_pad($cab, 5, "0", STR_PAD_LEFT);
$ccc = str_pad(preg_replace('/[^A-Z0-9]/', '', $ccc), 12, "0",
STR_PAD_LEFT);
Domani mi aspetta l'IBAN :)
mezz'oretta l'ho fatto (incredibile ma vero sembra giusto al primo
colpo... strano, conoscendomi).
Lo posto sperando che possa essere a qualcuno, e vi invito a migliorarlo.
function Calcola_BBAN($abi, $cab, $ccc, &$cin) {
$contributi =
array( 1, 0, 5, 7, 9, 13, 15, 17, 19, 21, 2,
4, 18, 20, 11, 3, 6, 8, 12, 14, 16, 10,
22, 25, 24, 23);
$arr_bban = str_split($abi . $cab . $ccc);
$pari = false;
$somma = 0;
foreach ($arr_bban as $char) {
$char2 = is_numeric($char) ? $char : ord($char)-65;
$somma += $pari ? $char2 : $contributi[$char2];
$pari = !$pari;
}
$cin = chr(($somma % 26)+65);
return $cin . $abi . $cab . $ccc;
}
Ovviamente ha bisogno di abi, cab e c/c passati in forma corretta: per
adesso io li "depuro" così:
$abi = str_pad($abi, 5, "0", STR_PAD_LEFT);
$cab = str_pad($cab, 5, "0", STR_PAD_LEFT);
$ccc = str_pad(preg_replace('/[^A-Z0-9]/', '', $ccc), 12, "0",
STR_PAD_LEFT);
Domani mi aspetta l'IBAN :)
--
Jax
Jax