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?