Validazione IBAN

di il
3 risposte

Validazione IBAN

Ciao a tutti,

ho un problema con la validazione IBAN.
Dove lavoro c'è un applicativo online dal 2014 che ha un metodo jquery per verificare la correttezza dell'iban inserito.
Tuttavia tale algoritmo valida correttamente i seguenti iban:

IT19E0513216906859570387339 (non corretto)
IT35I0513216906859570387339 (corretto)

Ho provato a fare una ricerca su internet di un'alternativa java e ho trovato il seguente algoritmo:

Assumendo un iban di 27 caratteri:

1) Bisogna spostare i primi quattro caratteri del codice IBAN dall’inizio alla fine.
2) Dopo di che bisogna convertire tutte le lettere in numeri interi, in particolare A=10, B=11 fino a Z=35.
3) Fatto questo, del numero intero risultante bisogna fare il modulo con 97.
4) Se il risultato del modulo è 1, allora l’IBAN è valido.

Di seguito il codice java (integrato in una classe di prova):


import java.math.BigDecimal;
import java.text.CharacterIterator;
import java.text.StringCharacterIterator;

import org.apache.commons.lang3.StringUtils;


public class CalcoloIban {

public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(checksum("IT19E0513216906859570387339"));
System.out.println(checksum("IT35I0513216906859570387339"));

}

public static boolean checksum(String iban) {

iban = iban.toUpperCase();

String rearrangedIban = StringUtils.substring(iban, 4).concat(StringUtils.substring(iban, 0, 4));

StringCharacterIterator iterator = new StringCharacterIterator(rearrangedIban);

StringBuilder builder = new StringBuilder();

for(char ch = iterator.first(); ch != CharacterIterator.DONE; ch = iterator.next()) {
if(ch >= 'A' && ch <= 'Z') {
int valorePerIban = ch - 55;
builder.append(valorePerIban);
} else {
builder.append(ch);
}
}

BigDecimal ibanConvertito = new BigDecimal(builder.toString());

BigDecimal resto = ibanConvertito.remainder(BigDecimal.valueOf(97));

if(resto.intValue() == 1) {
return true;
}

return false;
}

}

NB: il codice compila aggiungendo la libreria commons-lang3-3.5.jar

Anche questo codice mi valida entrambi gli iban:

IT19E0513216906859570387339 (non corretto)
IT35I0513216906859570387339 (corretto)

Ho provato a cercare ulteriormente in rete ma non ho trovato nient'altro(tutti le routine si assomigliano).
Per la verifica online degli iban ho usato questo sito:

http://it.ibancalculator.com/iban_validieren.htm

che mi valida correttamente l'iban IT35I0513216906859570387339



Manca qualcosa?

3 Risposte

Devi accedere o registrarti per scrivere nel forum
3 risposte