Discussione:
Calcolo CIN in php: il mio contributo
(troppo vecchio per rispondere)
Jax
2008-01-15 20:14:37 UTC
Permalink
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 :)
--
Jax
Jax
2008-01-17 09:29:07 UTC
Permalink
Post by Jax
Domani mi aspetta l'IBAN :)
Ecco qua la funzione per l'IBAN (partendo dal BBAN):

function Calcola_IBAN($bban, $cdnaz) {
if ($cdnaz == '') $cdnaz = 'IT';
$arr_bban = str_split($bban . $cdnaz . '00');
$digits = '';
foreach ($arr_bban as $char) {
$digits .= is_numeric($char) ? $char : ord($char)-55;
if (strlen($digits) > 8) $digits = $digits % 97;
}
$check = (98-($digits % 97)) % 97;
return $cdnaz . sprintf('%02s', $check) . $bban;
}

E' impressionante la facilità di scrittura del codice PHP...
--
Jax
Loading...