2016-10-27 2 views
0

Quelqu'un peut-il me dire comment valider les numéros de compte BBAN hongrois? sur internet je n'ai trouvé qu'il est de 24 numéros longueur et en formatvalidation BBAN hongrois

bbbs sssk cccc cccc cccc cccx 
b = National bank code 
s = Branch code 
c = Account number 
x = National check digit 

mais comment calculer x = chiffre de contrôle national? J'ai essayé de supprimer le dernier caractère et reste modulo par 97, mais il ne fonctionne pas (le résultat est 1 pour les numéros de compte valides)

merci à l'avance pour toute aide

+0

vous devrez peut-être contacter _Hungarian Banking Association_ que l'algorithme pour calculer le chiffre de contrôle que vous recherchez est spécifique au pays, et ils sont l'organisation la plus compétente pour vous donner des conseils à ce sujet. vous pouvez trouver leurs coordonnées __ [ici] (http://www.ecbs.org/iban/hungary-bank-account-number.html) __. – holex

Répondre

0

Je viens de validation de compte hongrois fini fonction. C'est la première version de cette fonction mais ça marche bien.

public string sprawdzWegierskitempAccountNumber(string _accountNumberToCheck, bool _iban) //if iban is true then function result will be always IBAN (even if _accountNumberToCheck will be BBAN) { string _accountNumberCorrected = _accountNumberToCheck.Replace(" ", ""); _accountNumberCorrected = _accountNumberCorrected.Replace("-", ""); _accountNumberCorrected = _accountNumberCorrected.Replace("//", ""); _accountNumberCorrected = _accountNumberCorrected.Replace("\", ""); string _accountNumberCorrectedFirst = _accountNumberCorrected; if (_accountNumberCorrected.Length == 16 || _accountNumberCorrected.Length == 24 || _accountNumberCorrected.Length == 28) {

 if (_accountNumberCorrected.Length == 28) //IBAN Account number 
     { 
      _accountNumberCorrected = _accountNumberCorrected.Substring(4, _accountNumberCorrected.Length - 4); //we don't need first four digits (HUxx) 
     } 

     string digitToMultiply = "9731"; 
     int checkResult = 0; 

     //checking first part of account number 
     for (int i = 0; i <= 6; i++) 
     { 
      checkResult = checkResult + int.Parse(_accountNumberCorrected.ToCharArray()[i].ToString()) * int.Parse(digitToMultiply.ToCharArray()[i % 4].ToString()); 
     } 
     checkResult = checkResult % 10; 
     checkResult = 10 - checkResult; 
     if (checkResult == 10) 
     { 
      checkResult = 0; 
     } 
     if (checkResult.ToString() != _accountNumberCorrected.ToCharArray()[7].ToString()) 
     { 
      throw new Exception("Wrong account number"); 
     } 
     else 
     { 
      //if first part it's ok then checking second part of account number 
      checkResult = 0; 
      for (int i = 8; i <= _accountNumberCorrected.Length-2; i++) 
      { 
       checkResult = checkResult + int.Parse(_accountNumberCorrected.ToCharArray()[i].ToString()) * int.Parse(digitToMultiply.ToCharArray()[i % 4].ToString()); 
      } 

      checkResult = checkResult % 10; 
      checkResult = 10 - checkResult; 
      if (checkResult == 10) 
      { 
       checkResult = 0; 
      } 
      if (checkResult.ToString() != _accountNumberCorrected.ToCharArray()[_accountNumberCorrected.Length-1].ToString()) 
      { 
       throw new Exception("Wrong account number"); 
      } 

     } 

     string tempAccountNumber = _accountNumberCorrected + "173000"; 

     var db = 0; var iban = 0; 
     var maradek = 0; 
     string resz = "", ibanstr = "", result = ""; 

     while (true) 
     { 

      if (db == 0) 
      { 
       resz = tempAccountNumber.Substring(0, 9); 
       tempAccountNumber = tempAccountNumber.Substring(9, (tempAccountNumber.Length - 9)); 

      } 

      else 
      { 

       resz = maradek.ToString(); 
       resz = resz + tempAccountNumber.Substring(0, (9 - db)); 
       tempAccountNumber = tempAccountNumber.Substring((9 - db), (tempAccountNumber.Length - 9 + db)); 

      } 

      maradek = int.Parse(resz) % 97; 

      if (maradek == 0) 
       db = 0; 
      else 
       if (maradek < 10) 
        db = 1; 
       else 
        db = 2; 

      if ((tempAccountNumber.Length + db) <= 9) 
       break; 
     } 

     if (maradek != 0) 
     { 
      resz = maradek.ToString(); 
      resz = resz + tempAccountNumber; 
     } 
     else 
      resz = tempAccountNumber; 

     maradek = int.Parse(resz) % 97; ; 
     iban = 98 - maradek; 
     if (iban < 10) 
      ibanstr = "0" + iban.ToString(); 
     else ibanstr = iban.ToString(); 

     if (_accountNumberCorrected.Length == 16) 
     { 
      _accountNumberCorrected = _accountNumberCorrected + "00000000"; 
      _accountNumberCorrectedFirst = _accountNumberCorrectedFirst + "00000000"; 
     } 

     if (_iban) 
     { 
      result = "HU" + ibanstr + _accountNumberCorrected; 
     } 
     else 
     { 
      result = _accountNumberCorrectedFirst; 
     } 

     return result; 
    } 
    else 
    { 
     throw new Exception("Wrong length of account number"); 
    } 
}