Validation d’un IBAN en C#


26 09 2007

J’ai passé trop de temps à chercher sur Internet comment réaliser la validation d’un code IBAN en C#.

Ce bout de code valide donc que le n° IBAN saisi est correct. Attention il ne valide pas en fonction du pays mais calcule seulement la clé « checksum ».

Ce n’est pas du grand art mais cela permettra à d’autres d’éviter de passer une heure à chercher !

Et si vous êtes plutôt VB.NET, pas de problème, http://www.codechanger.com/ est là…

 

private static bool ValidateIBAN(string ibanValue)
{
  string iban = ibanValue.Substring(4, ibanValue.Length - 4) 
		+ ibanValue.Substring(0, 4);
  StringBuilder sb = new StringBuilder();
  foreach (char c in iban)
  {
    int v;
    if (Char.IsLetter(c))
    {
        v = c - 'A' + 10;
    }
    else
    {
       v = c - '0';
    }
    sb.Append(v);
  }
  string checkSumString = sb.ToString();
  int checksum = int.Parse(checkSumString.Substring(0, 1));
  for (int i = 1; i < checkSumString.Length; i++)
  {
     int v = int.Parse(checkSumString.Substring(i, 1));
     checksum *= 10;
     checksum += v;
     checksum %= 97;
  }
  return checksum == 1;
}

Billets similaires

Actions

Informations

2 réponses à “Validation d’un IBAN en C#”

26 09 2007
Royale (14:02:32) :

Moi j’aurais pu te dire commencer valider une clef RIB en PL/SQL comme je l’ai fais y a pas longtemps… Mais c’est moins sexy 😉

20 11 2008
Albireo (11:31:14) :

Hi, thank you very much for your code, has saved my life from implementing a validation function from scratch… ^_^

I reformatted a bit your code to improve readability removing some variables and replaced the for cycle with another foreach.

If the code below becomes messed up, I’ve uploaded the snippet here: pastebin.com.

public static bool ValidateIban(String Iban)
{
StringBuilder sbCheck;
Int32 intValue;
Int32 intChecksum;

Iban = Iban.Substring(4, Iban.Length - 4) + Iban.Substring(0, 4);

sbCheck = new StringBuilder();

foreach (Char cCharacter in Iban)
{
intValue = (Char.IsLetter(cCharacter)) ? (cCharacter - 'A' + 10) : (cCharacter - '0');

sbCheck.Append(intValue);
}

intChecksum = Int32.Parse(sbCheck.ToString(0, 1));

foreach (Char cCharacter in sbCheck.ToString(1, sbCheck.Length - 1))
{
intValue = Int32.Parse(cCharacter.ToString());

intChecksum *= 10;
intChecksum += intValue;
intChecksum %= 97;
}

return (intChecksum == 1);
}